Hướng dẫn python generate random list of numbers without duplicates - python tạo danh sách số ngẫu nhiên không có bản sao

Máy tạo số giả đồng hồ sơ tuyến tính tuyến tính

O (1) Bộ nhớ

O (k) Hoạt động

Vấn đề này có thể được giải quyết với một máy phát điện tuyến tính đơn giản. Điều này yêu cầu chi phí bộ nhớ không đổi (8 số nguyên) và nhiều nhất là tính toán 2*(độ dài chuỗi).

Tất cả các giải pháp khác sử dụng nhiều bộ nhớ hơn và tính toán nhiều hơn! Nếu bạn chỉ cần một vài chuỗi ngẫu nhiên, phương pháp này sẽ rẻ hơn đáng kể. Đối với các phạm vi kích thước

# Show off random range.
print()
for v in range(3,6):
    v = 2**v
    l = list(random_range(v))
    print("Need",v,"found",len(set(l)),"(min,max)",(min(l),max(l)))
    print("",l)
    print()
1, nếu bạn muốn tạo theo thứ tự
# Show off random range.
print()
for v in range(3,6):
    v = 2**v
    l = list(random_range(v))
    print("Need",v,"found",len(set(l)),"(min,max)",(min(l),max(l)))
    print("",l)
    print()
1 duy nhất ____ 13 chuỗi trở lên, tôi khuyên bạn nên sử dụng giải pháp được chấp nhận bằng các phương thức tích hợp
# Show off random range.
print()
for v in range(3,6):
    v = 2**v
    l = list(random_range(v))
    print("Need",v,"found",len(set(l)),"(min,max)",(min(l),max(l)))
    print("",l)
    print()
4 vì điều này đã được tối ưu hóa trong Python cho tốc độ.

Mã số

# Return a randomized "range" using a Linear Congruential Generator
# to produce the number sequence. Parameters are the same as for 
# python builtin "range".
#   Memory  -- storage for 8 integers, regardless of parameters.
#   Compute -- at most 2*"maximum" steps required to generate sequence.
#
def random_range(start, stop=None, step=None):
    import random, math
    # Set a default values the same way "range" does.
    if (stop == None): start, stop = 0, start
    if (step == None): step = 1
    # Use a mapping to convert a standard range into the desired range.
    mapping = lambda i: (i*step) + start
    # Compute the number of numbers in this range.
    maximum = (stop - start) // step
    # Seed range with a random integer.
    value = random.randint(0,maximum)
    # 
    # Construct an offset, multiplier, and modulus for a linear
    # congruential generator. These generators are cyclic and
    # non-repeating when they maintain the properties:
    # 
    #   1) "modulus" and "offset" are relatively prime.
    #   2) ["multiplier" - 1] is divisible by all prime factors of "modulus".
    #   3) ["multiplier" - 1] is divisible by 4 if "modulus" is divisible by 4.
    # 
    offset = random.randint(0,maximum) * 2 + 1      # Pick a random odd-valued offset.
    multiplier = 4*(maximum//4) + 1                 # Pick a multiplier 1 greater than a multiple of 4.
    modulus = int(2**math.ceil(math.log2(maximum))) # Pick a modulus just big enough to generate all numbers (power of 2).
    # Track how many random numbers have been returned.
    found = 0
    while found < maximum:
        # If this is a valid value, yield it in generator fashion.
        if value < maximum:
            found += 1
            yield mapping(value)
        # Calculate the next value in the sequence.
        value = (value*multiplier + offset) % modulus

Cách sử dụng

Việc sử dụng hàm này "Random_range" giống như đối với bất kỳ trình tạo nào (như "phạm vi"). Một ví dụ:

# Show off random range.
print()
for v in range(3,6):
    v = 2**v
    l = list(random_range(v))
    print("Need",v,"found",len(set(l)),"(min,max)",(min(l),max(l)))
    print("",l)
    print()

Kết quả mẫu

Required 8 cycles to generate a sequence of 8 values.
Need 8 found 8 (min,max) (0, 7)
 [1, 0, 7, 6, 5, 4, 3, 2]

Required 16 cycles to generate a sequence of 9 values.
Need 9 found 9 (min,max) (0, 8)
 [3, 5, 8, 7, 2, 6, 0, 1, 4]

Required 16 cycles to generate a sequence of 16 values.
Need 16 found 16 (min,max) (0, 15)
 [5, 14, 11, 8, 3, 2, 13, 1, 0, 6, 9, 4, 7, 12, 10, 15]

Required 32 cycles to generate a sequence of 17 values.
Need 17 found 17 (min,max) (0, 16)
 [12, 6, 16, 15, 10, 3, 14, 5, 11, 13, 0, 1, 4, 8, 7, 2, ...]

Required 32 cycles to generate a sequence of 32 values.
Need 32 found 32 (min,max) (0, 31)
 [19, 15, 1, 6, 10, 7, 0, 28, 23, 24, 31, 17, 22, 20, 9, ...]

Required 64 cycles to generate a sequence of 33 values.
Need 33 found 33 (min,max) (0, 32)
 [11, 13, 0, 8, 2, 9, 27, 6, 29, 16, 15, 10, 3, 14, 5, 24, ...]

Trong hướng dẫn này, chúng tôi sẽ học cách nhận các số ngẫu nhiên không lặp lại trong Python. Không có chức năng được xây dựng để thực hiện nhiệm vụ này. Nhưng, chúng ta có thể sử dụng một số kỹ thuật để làm điều này. Chúng tôi sẽ thảo luận về các phương pháp này trong hướng dẫn này.

Các phương pháp chúng tôi sử dụng trong hướng dẫn này:

  • random.sample()
  • ramdom.choices()

Hai phương thức này lấy một danh sách làm đầu vào và chọn K (đầu vào) các phần tử ngẫu nhiên và trả lại chúng. Để có được các yếu tố không lặp lại, chúng tôi đưa ra một danh sách làm đầu vào nơi không có các yếu tố lặp lại. Ngay cả khi chúng ta đã có một danh sách với các yếu tố lặp lại, chúng ta có thể chuyển đổi nó thành đặt và quay lại danh sách, điều này sẽ xóa các yếu tố lặp lại. Nếu chúng tôi không có danh sách và nhận các phần tử giữa hai số, chúng tôi có thể thực hiện điều đó bằng cách sử dụng hàm Range ().

Hãy cùng xem xét các ví dụ:

Sử dụng Random.sample () Ví dụ 1:

Random.sample () là một hàm được xây dựng của Python cung cấp cho chúng ta một danh sách các yếu tố ngẫu nhiên từ danh sách đầu vào.

#importing required libraries
import random
li=[10,20,30,40,20,30,60,50,60]
#converting list to set so that to remove repeating elements
se=set(li)
li=list(se)
#we use this list to get non-repeating elemets
print(random.sample(li,3))
[60, 50, 20]

Ví dụ 2:

Sử dụng hàm () hàm. Hàm này đưa ra một danh sách các yếu tố không lặp lại giữa một loạt các yếu tố.

#importing required libraries
import random
li=range(0,100)
#we use this list to get non-repeating elemets
print(random.sample(li,3))
[35, 81, 47]

Sử dụng Random.Choices () Ví dụ 3:

Random.choices () là một hàm được xây dựng trong Python. Phương pháp này lấy 2 đối số một danh sách và một số nguyên. Điều này trả về một danh sách một độ dài nhất định được chọn ngẫu nhiên từ danh sách đã cho.

#importing required libraries
import random
li=[10,20,30,40,20,30,60,50,60]
#converting list to set so that to remove repeating elements
se=set(li)
li=list(se)
#we use this list to get non-repeating elemets
print(random.choices(li,k=3))
[50, 10, 60]

Ví dụ 4:

#importing required libraries
import random
li=range(0,100)
#we use this list to get non-repeating elemets
print(random.choices(li,k=3))
# Show off random range.
print()
for v in range(3,6):
    v = 2**v
    l = list(random_range(v))
    print("Need",v,"found",len(set(l)),"(min,max)",(min(l),max(l)))
    print("",l)
    print()
0

Cũng đọc:

Làm cách nào để tạo một danh sách các số ngẫu nhiên mà không có các bản sao trong Python?

Để tạo danh sách các số ngẫu nhiên mà không sao chép với Python, chúng ta có thể sử dụng phương thức ngẫu nhiên.sample. Chúng tôi gọi là ngẫu nhiên. Mẫu với phạm vi số để tạo và số lượng ngẫu nhiên để tạo tương ứng.use the random. sample method. We call random. sample with the range of numbers to generate and the number of random numbers to generate respectively.

Làm cách nào để lập danh sách các số ngẫu nhiên mà không có bản sao?

Tạo danh sách số ngẫu nhiên không có bản sao trong Excel..
Chọn ô B3 và nhấp vào nó ..
Chèn công thức: = randbetween (10,30).
Nhấn Enter..
Kéo công thức xuống các ô khác trong cột bằng cách nhấp và kéo biểu tượng nhỏ++ở phía dưới bên phải của ô ..

Làm thế nào để bạn tránh lặp lại trong sự lựa chọn ngẫu nhiên Python?

Tuy nhiên, chúng ta cần chuyển đổi danh sách thành một tập hợp để tránh lặp lại các yếu tố. Nếu phương thức Lựa chọn () được áp dụng trên một chuỗi các số duy nhất hơn nó sẽ trả về danh sách các lựa chọn ngẫu nhiên duy nhất chỉ khi đối số k (tức là số lượng lựa chọn) sẽ lớn hơn kích thước của danh sách.convert the list into a set in order to avoid repetition of elements. If the choices() method is applied on a sequence of unique numbers than it will return a list of unique random selections only if the k argument (i.e number of selections) should be greater than the size of the list.

Làm thế nào để bạn tạo ra các số ngẫu nhiên duy nhất trong Python?

Python Math: Tạo một loạt các số ngẫu nhiên duy nhất..
Giải pháp mẫu:.
Mã Python: Nhập các lựa chọn ngẫu nhiên = Danh sách (phạm vi (100)) ngẫu nhiên) == 'n': break in (lựa chọn.pop ()) ....
Trình bày bằng hình ảnh:.
Flowchart:.