【问题标题】:generate multiple conditional statements from list从列表中生成多个条件语句
【发布时间】:2018-04-17 11:34:57
【问题描述】:

我有一个这样的列表

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 或循环来编写多个条件语句。假设我的列表长度为 100,我需要为列表的 57 列创建条件语句。我可能不想以这种方式把它们都写出来…… 谢谢

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案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是否相同

      希望这会有所帮助!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-18
        • 2021-07-21
        • 2016-06-03
        • 1970-01-01
        相关资源
        最近更新 更多