从列表生成多个条件语句

时间:2017-11-05 02:59:05

标签: python python-3.x if-statement conditional

我有一个像这样的列表

a = [1,0,6,9,6,0,6,0,1,4,0,7,5,0]

我想创建一个这样的条件语句:

if a[1,3,8,13] != 0:
    do something

这段代码显然是错误的。它必须是这样的:

if a[1] != 0 and a[3] != 0 and a[8] != 0 and a[13] != 0:
    do something

我想知道在我的情况下是否有更优雅的方法来使用lambda或loop编写多个条件语句。假设我的列表长度为100,我需要为列表的57列创建条件语句。我可能不想以这样的方式写出来...... 感谢

2 个答案:

答案 0 :(得分:5)

1。

您可以使用all

if all(a[i] != 0 for i in [1,3,8,13]): # => a[i] != 0 for every i 
    #do smth

或与any相同:

if not any(a[i] == 0 for i in [1,3,8,13]): # => there is no such i that a[i] == 0
    #do smth                               # => a[i] != 0 for every i 

2

或者,您可以使用一些函数式编程 例如,您可以尝试filter

a = [1,0,6,9,6,0,6,0,1,4,0,7,5,0]
idxs_to_check = [1,3,8,13]

f = list(filter(lambda i: a[i] != 0, idxs_to_check))
if f == idxs_to_check:
    print('Meow')

或者,一行中的类似情况:

if not list(filter(lambda i: a[i] == 0, [1,3,8,13])): 
    print('Meow')

3

最后,在您的特定情况下,您可以使用包含零的列表的乘积为零的事实:

from numpy import prod

if prod([a[i] for i in [1,3,8,13]]):
    print("Woof")

答案 1 :(得分:2)

您可以尝试类似

的内容
a = [1,0,6,9,6,0,6,0,1,4,0,7,5,0]

if a[1] or a[2] or a[8] or a[13] != a[2]:
      print (“something”) #this part cuz I’m not sure what ur doing here

我真的不知道这是否有效,希望确实如此。 但同样这可能会重复。所以你可能想要结果

if all(a[i] != 0 for i in [1,3,8,13]

基本上你遍历列表中每个你选择的位置来检查位置0是否相同

希望这有帮助!