Tôi biết làm thế nào để tạo một số ngẫu nhiên trong một phạm vi trong Python.
random.randint[numLow, numHigh]
Và tôi biết tôi có thể đặt nó vào một vòng lặp để tạo ra n số lượng của các số này
for x in range [0, n]:
listOfNumbers.append[random.randint[numLow, numHigh]]
Tuy nhiên, tôi cần đảm bảo mỗi số trong danh sách đó là duy nhất. Khác với một tải các câu lệnh có điều kiện, có cách nào đơn giản để tạo n số số ngẫu nhiên duy nhất không?
Điều quan trọng là mỗi số trong danh sách khác với các số khác ..
Vì thế
[12, 5, 6, 1] = Tốt
Nhưng mà
[12, 5, 5, 1] = xấu, vì số 5 xảy ra hai lần.
Hỏi ngày 3 tháng 4 năm 2014 lúc 15:29Apr 3, 2014 at 15:29
Tiêu đề Chris HeadleandchrisChris Headleand
5.72316 Huy hiệu vàng 50 Huy hiệu bạc66 Huy hiệu Đồng16 gold badges50 silver badges66 bronze badges
1
Nếu bạn chỉ cần lấy mẫu mà không cần thay thế:
>>> import random
>>> random.sample[range[1, 100], 3]
[77, 52, 45]
Random.Sample có dân số và cỡ mẫu
for x in range [0, n]:
listOfNumbers.append[random.randint[numLow, numHigh]]
0 và trả lại for x in range [0, n]:
listOfNumbers.append[random.randint[numLow, numHigh]]
0 Thành viên ngẫu nhiên của dân số.Nếu bạn phải kiểm soát trường hợp
for x in range [0, n]:
listOfNumbers.append[random.randint[numLow, numHigh]]
0 lớn hơn for x in range [0, n]:
listOfNumbers.append[random.randint[numLow, numHigh]]
3, bạn cần phải chuẩn bị để bắt for x in range [0, n]:
listOfNumbers.append[random.randint[numLow, numHigh]]
4:>>> try:
... random.sample[range[1, 2], 3]
... except ValueError:
... print['Sample size exceeded population size.']
...
Sample size exceeded population size
Đã trả lời ngày 3 tháng 4 năm 2014 lúc 15:34Apr 3, 2014 at 15:34
5
Tạo ra phạm vi dữ liệu trước và sau đó xáo trộn nó như thế này
import random
data = list[range[numLow, numHigh]]
random.shuffle[data]
print data
Bằng cách thực hiện theo cách này, bạn sẽ nhận được tất cả các số trong phạm vi cụ thể nhưng theo thứ tự ngẫu nhiên.
Nhưng bạn có thể sử dụng
for x in range [0, n]:
listOfNumbers.append[random.randint[numLow, numHigh]]
5 để có được số lượng các yếu tố bạn cần, từ một loạt các số như thế nàyprint random.sample[range[numLow, numHigh], 3]
Đã trả lời ngày 3 tháng 4 năm 2014 lúc 15:31Apr 3, 2014 at 15:31
Thefourtheyethefourtheyethefourtheye
227K52 Huy hiệu vàng443 Huy hiệu bạc486 Huy hiệu Đồng52 gold badges443 silver badges486 bronze badges
1
Bạn có thể thêm vào
for x in range [0, n]:
listOfNumbers.append[random.randint[numLow, numHigh]]
6 cho đến khi bạn đạt được for x in range [0, n]:
listOfNumbers.append[random.randint[numLow, numHigh]]
7:setOfNumbers = set[]
while len[setOfNumbers] < n:
setOfNumbers.add[random.randint[numLow, numHigh]]
Hãy cẩn thận khi có một phạm vi nhỏ hơn sẽ phù hợp với
for x in range [0, n]:
listOfNumbers.append[random.randint[numLow, numHigh]]
7. Nó sẽ lặp lại mãi mãi, không thể tìm thấy các số mới để chèn lên đến for x in range [0, n]:
listOfNumbers.append[random.randint[numLow, numHigh]]
7Đã trả lời ngày 3 tháng 4 năm 2014 lúc 15:32Apr 3, 2014 at 15:32
1
Bạn có thể sử dụng chức năng
for x in range [0, n]:
listOfNumbers.append[random.randint[numLow, numHigh]]
5 từ thư viện tiêu chuẩn để chọn các yếu tố k từ dân số:import random
random.sample[range[low, high], n]
Trong trường hợp có một loạt các số khá lớn, bạn có thể sử dụng
>>> import random
>>> random.sample[range[1, 100], 3]
[77, 52, 45]
1 với một trình tạo ngẫu nhiên vô hạn:import itertools
import random
def random_gen[low, high]:
while True:
yield random.randrange[low, high]
gen = random_gen[1, 100]
items = list[itertools.islice[gen, 10]] # Take first 10 random elements
Sau khi cập nhật câu hỏi, bây giờ rõ ràng là bạn cần n số [duy nhất] khác biệt.
import itertools
import random
def random_gen[low, high]:
while True:
yield random.randrange[low, high]
gen = random_gen[1, 100]
items = set[]
# Try to add elem to set until set length is less than 10
for x in itertools.takewhile[lambda x: len[items] < 10, gen]:
items.add[x]
Đã trả lời ngày 3 tháng 4 năm 2014 lúc 15:39Apr 3, 2014 at 15:39
Maxbublismaxbublismaxbublis
1.24310 Huy hiệu bạc21 Huy hiệu đồng10 silver badges21 bronze badges
0