2024-04-26 04:00:15 发布
网友
我想创建一个元组的随机列表,其中每个元组长度相同(例如6个元组),并且由values = [0, 15, 30, 45, 60].的随机选择组成
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, 30, 60, 0 , 15, 0)...(15, 45, 45, 0, 30, 60)]
(0, 0, 0, 0, 0, 0)
只是事后过滤:
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如果tup中的所有值为假;0为假值。这保证了函数永远不会返回`(0,0,0,0,0,0)。你知道吗
any(tup)
False
tup
0
在列表中使用:
random_tuples = [random_nonzero_tuple() for _ in range(desired_length)]
另一种可能的解决方案是:
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)
>>> from random import choice >>> from itertools import count >>> from operator import itemgetter >>> values = (0, 15, 30, 45, 60) >>> length = 6 >>> non_zero_tuples_generator = filter (any, map (lambda _ : tuple (choice (values) for _ in range (length)), count ())) >>> first_6_tuples = tuple (map (itemgetter (1), zip (range (6), non_zero_tuples_generator))) ((0, 60, 0, 60, 60, 60), (0, 45, 15, 60, 60, 30), (0, 0, 0, 0, 45, 30), (30, 15, 60, 30, 30, 60), (0, 30, 45, 0, 60, 30), (15, 60, 60, 0, 45, 60))
只是事后过滤:
any(tup)
返回False
如果tup
中的所有值为假;0
为假值。这保证了函数永远不会返回`(0,0,0,0,0,0)。你知道吗在列表中使用:
另一种可能的解决方案是:
相关问题 更多 >
编程相关推荐