生成列表而不接受某些值

pls*_*elp -2 python random python-2.7

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

Mar*_*ers 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 
Run Code Online (Sandbox Code Playgroud)

any(tup)False如果所有tup都为false 则返回; 0是假的.这保证了函数永远不会返回`(0,0,0,0,0,0).

在列表理解中使用它:

random_tuples = [random_nonzero_tuple() for _ in range(desired_length)]
Run Code Online (Sandbox Code Playgroud)