我想生成两个不同的随机数列表。 条件是第一个列表索引的值不能等于相同索引中的第二个列表值。
例如,a=[5,6,7,5]
和q=[2,7,3,5]
在这种情况下,列表q中第四个索引的值等于列表a中相同索引中的值。我想避免这种情况。我创建了一个列表
import random
a=[]
b=list(range(1,7164))
for i in b:
t=random.randint(1,20)
a.append(t)
如何生成具有上述条件的第二个列表?
答案 0 :(得分:2)
我认为最好的方法是对每个项目进行迭代,并以一个与原始值不相同的方式用一个随机数补偿它。 在代码末尾添加以下内容:
c = []
for i in range(len(a)):
t = (a[i] + random.randint(1, 19)) % 19 + 1
c.append(t)
这样,您可以用1-18之间的数字偏移每个项目,如果超过19,则将其环绕。(+ 1表示介于1和19之间,而不是0)
答案 1 :(得分:2)
这会将lifelines
和a
创建为元组,但是您可以轻松地将它们转换为列表。
q
答案 2 :(得分:2)
希望这对您有帮助。 可以使用随机数从列表中随机选择一个项目。
例如,如果列表中有10个索引在0到9之间的项目,则可以生成0到9之间的随机整数,并使用它从列表中随机选择一个项目。 choice()函数可为您实现此行为。选择的可能性是统一的。
下面的示例生成一个包含20个整数的列表,并给出了五个从列表中选择一个随机项的示例。
# choose a random element from a list
from random import seed
from random import choice
# seed random number generator
seed(1)
# prepare a sequence
sequence = [i for i in range(20)]
print(sequence)
# make choices from the sequence
for _ in range(5):
selection = choice(sequence)
print(selection)
首先运行示例,然后打印整数值列表,然后是从列表中选择和打印随机值的五个示例。
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
4
18
2
8
3
答案 3 :(得分:2)
import random
def generate_n_lists(num_of_lists, num_of_elements, value_from=0, value_to=100):
s = random.sample(range(value_from, value_to + 1), num_of_lists * num_of_elements)
return [s[i*num_of_elements:(i+1)*num_of_elements] for i in range(num_of_lists)]
print(generate_n_lists(2, 5, 0, 20)) # generate 2 lists, each 5 elements, values are from 0 to 20
打印:
[[1, 16, 4, 3, 15], [0, 10, 14, 17, 7]]
答案 4 :(得分:1)
为避免这种情况,只需检查是否重复即可。如果是,请再次生成一个不同的随机数。
import random
a=[]
b=list(range(1,7164))
for i in b:
t=random.randint(1,20)
while t == i:
t = random.randint(1,20)
a.append(t)
print(a)
答案 5 :(得分:1)
有多种方法可以做到这一点。
一种方法是在较小的范围内生成第二个随机值,如果等于或超过排除值,则将其偏移:
excluded_value = first_list[i]
new_value = random.randint(1, 19)
if new_value >= excluded_value:
new_value += 1
另一种方法是同时生成列表,使用random.sample进行选择而不进行替换。
possible_values = range(1, 20) # or xrange on python 2.x
while i < desired_num_values:
a, b = random.sample(possible_values, 2)
first_list.append(a)
second_list.append(b)
i += 1
我没有进行分析以查看是否存在明显的性能差异。在没有冲突之前,两者似乎都比重复生成随机数要快(但同样,我没有进行分析确认)。如果您想要两个以上的列表,则第二个可以更优雅地扩展。
这些不是唯一的方法。
答案 6 :(得分:1)
import random
a=[]
b=[]
for rand_a in range(1,7164):
a.append(random.randint(1,20))
random.seed()
for rand_b in range(1,7164):
r = random.randint(1,20)
# keep rolling until you get a diff number
while (a[rand_b] == r):
r = random.randint(1,20)
b.append(r)
您的代码示例包含1个随机列表和1个列表1,7164。 此代码将为您生成两个包含1,20的列表,总共17164个元素,这些元素根据它们在另一个列表中的位置而有所不同。 种子可能不是必需的,但