簡體   English   中英

尋找一種更短的方法來執行多個隨機數分配

[英]Looking for a shorter way to perform multiple random number assignments

我正在嘗試完成一個挑戰,其中我必須生成兩個隨機數列表,然后將列表共有的數字拉到另一個沒有重復的列表中。 我有一些有效的方法,但我覺得它可能會更短。 有沒有更好的方法為列表z和y分配隨機范圍? 有一個列表理解會起作用嗎?

import random
from random import randrange 

z = list(range(random.randrange(1,100,1)))
y = list(range(random.randrange(1,100,1)))

for i in range(len(z)):
    z[i] = random.randint(1,1000)

for i in range(len(y)):
    y[i] = random.randint(1,1000)


c = { item for item in z if (item in y)}
print(c)

我將使用random.sample並通過使用隨機整數指定要采樣的數字:

y = random.sample(range(1, 1001), random.randint(1, 100))
z = random.sample(range(1, 1001), random.randint(1, 100))
set(y) & set(z)
Out[35]: {51, 585, 968}

正如@Alan指出的那樣:對於Python 2,最好使用xrange而不是range,因為range返回一個列表。 對於range(1000),這可能不是問題,但對於更大的范圍,則可能導致內存問題。 您還應該注意,random.sample的選擇沒有替換。 如果要選擇替換(以便可以重復數字),則可以像@DeepSpace一樣使用列表理解(當然,您不想將其轉換為集合,因此在這種情況下請使用[]而不是{}) )。

Python不是Java或C。您無需先聲明列表,然后將每個元素初始化為新對象。

您的整個代碼可以重構為:

set_a = {random.randint(1,1000) for _ in range(random.randint(1,1000))}
set_b = {random.randint(1,1000) for _ in range(random.randint(1,1000))}

common_list = set_a & set_b

您在找這個嗎? [i在范圍(100)中的random.randint(1,1000)]

您可以使用列表推導

import random
from random import randrange

z = [random.randint(1,1000) for x in range(100)]
y = [random.randint(1,1000) for x in range(100)]

c = set(y) & set(z)
print(c)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM