生成列表而不接受某些值

时间:2017-08-05 18:48:01

标签: python python-2.7 random

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

3 个答案:

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