我想创建一个随机的元组列表,其中每个元组的长度相同(例如6个),并由随机选择的values = [0, 15, 30, 45, 60].
示例解决方案是[(0, 30, 60, 0 , 15, 0)...(15, 45, 45, 0, 30, 60)]
。但是,我不想接受(0, 0, 0, 0, 0, 0)
作为解决方案。
答案 0 :(得分:5)
在事实之后过滤:
def random_nonzero_tuple(length=6, values=(0, 15, 30, 45, 60)):
while True:
tup = tuple(random.choice(values) for _ in range(length))
if any(tup):
return tup
如果any(tup)
中的所有值均为false,则 False
会返回tup
; 0
是假值。这保证了函数永远不会返回`(0,0,0,0,0,0)。
在列表理解中使用它:
random_tuples = [random_nonzero_tuple() for _ in range(desired_length)]
答案 1 :(得分:0)
{{1}}
答案 2 :(得分:0)
另一种可能的解决方案是:
from random import choice
def random_nonzero_tuple(length=6, values=(0, 15, 30, 45, 60)):
tup = tuple(map(choice, (values,) * length))
return tup if any(tup) else random_nonzero_tuple(length, values)