生成不接受某些值的列表

2024-04-26 04:00:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我想创建一个元组的随机列表,其中每个元组长度相同(例如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)作为解决方案。你知道吗


Tags: 列表解决方案例子元组values
3条回答

只是事后过滤:

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)。你知道吗

在列表中使用:

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))

相关问题 更多 >