How to generate N random integers, each with distinct digits and exact length L in Python

2 Answers

0 votes
import random

"""
    Generate a single random integer of length L whose digits are all distinct.
    The function returns the number as a string to preserve leading digits if needed.
"""
def generateDistinctDigitNumber(L):
    # Digits 0–9 are available; we will pick L distinct digits.
    # Using an array to store the chosen digits.
    # The result string will be built step by step.

    used = [False] * 10
    result = ""
    count = 0

    while count < L:
        # Always generate digits '0'..'9' reliably
        d = chr(48 + random.randint(0, 9))

        # If digit not used yet, accept it.
        if not used[ord(d) - ord('0')]:
            used[ord(d) - ord('0')] = True
            result += d
            count += 1

    return result

"""
    Generate N random integers, each with distinct digits and length L.
    Prints them directly.
"""
def generateNumbers(N, L):
    for _ in range(N):
        s = generateDistinctDigitNumber(L)
        print(s)


N = 10   # how many numbers to generate
L = 6    # length of each number

# Random engine setup: Python's random is already seeded automatically.

# Generate the numbers
print(f"Generated {N} numbers of length {L} with distinct digits:")
generateNumbers(N, L)



"""
run:

Generated 10 numbers of length 6 with distinct digits:
647832
258319
071956
046897
728319
196574
896720
894702
407628
634975

"""

 



answered Jul 16 by avibootz
0 votes
import random

def generate_distinct_digit_numbers(N, L):
    results = set()                     # store unique valid numbers
    lower = 10**(L-1)                   # smallest L‑digit number (e.g., 10000 for L=5)
    upper = 10**L - 1                   # largest L‑digit number (e.g., 99999 for L=5)

    # keep generating until we have N distinct-digit numbers
    while len(results) < N:
        num = random.randint(lower, upper)  # generate a random L‑digit integer
        s = str(num)                         # convert number to string for digit checking

        # check if all digits are unique by comparing length with the size of the set
        if len(set(s)) == L:
            results.add(num)                 # add to set (ensures no duplicates)

    return list(results)                     # convert set to list for final output


print(generate_distinct_digit_numbers(10, 6))



'''
run

[527136, 180357, 680549, 601482, 745163, 325491, 521079, 467032, 631097, 210974]

'''

 



answered Jul 16 by avibootz
edited Jul 16 by avibootz

Related questions

...