代码之家  ›  专栏  ›  技术社区  ›  Edward

双条件循环python

  •  0
  • Edward  · 技术社区  · 6 年前

    我有如下数据

    lst = ['abs', '@abs', '&abs']
    

    我需要用 @ & . 我喜欢这个

    new = []
    simbol1 = '@'
    simbol2 = '&'
    for item in lst:
        if simbol1 not in item:
            if simbol2 not in item:
                new.append(item)
    

    但是这个循环还有更简单的方法吗? 我这样试过

    lst = ['abs', '@abs', '&abs']
    new = []
    simbol1 = '@'
    simbol2 = '&'
    for item in lst:
        if any([simbol1 not in item , simbol2 not in item]):
            new.append(item)
    

    但我知道

    new
    ['abs', '@abs', '&abs']
    

    在这种情况下,使用多个条件的正确方法是什么?

    6 回复  |  直到 6 年前
        1
  •  2
  •   awesoon    6 年前

    你可以把两者结合起来 if 学生:

    if simbol1 not in item and simbol2 not in item:
        new.append(item)
    
        2
  •  3
  •   Pankaj Singhal    6 年前

    你可以用 list comprehension &合并两者(amp;M) if 如下所示:

    >>> lst = ['abs', '@abs', '&abs']
    >>> new_lst = [l for l in lst if '@' not in l and '&' not in l]
    >>> new_lst
    ['abs']
    >>> 
    

    你也可以使用 all() 不是多重的 如果 如下所示:

    >>> lst = ['abs', '@abs', '&abs']
    >>> new_lst = [l for l in lst if all(x not in l for x in ['@','&'])]
    >>> new_lst
    ['abs']
    >>> 
    
        3
  •  2
  •   Mike    6 年前
    lst = ['abs', '@abs', '&abs']
    new = []
    simbol1 = '@'
    simbol2 = '&'
    for item in lst:
        if all([simbol1 not in item , simbol2 not in item]):
           new.append(item)
    print (new)
    
        4
  •  1
  •   modesitt    6 年前

    Functionally ,你可以

    new_list = list(filter(lambda x: all(f not in x for f in ['@', '&']), lst))
    

    作为解释 lambda 功能确保 f 字符串中的字符由 filtering 计算出的所有值 False . filter 返回一个生成器,这样就可以使 list .

        5
  •  1
  •   Muthuraj    6 年前
    lst = ['abs', '@abs', '&abs']
    out_lst = [el for el in lst if '@' not in el and '&' not in el]
    print(out_lst) # ['abc']
    
        6
  •  1
  •   abarnert    6 年前

    您的代码非常接近于正确的;唯一的问题是您将否定向后。

    这:

    if any([simbol1 not in item , simbol2 not in item]):
    

    问“这些东西中有没有不在项目中?”正如在英语中,如果一个不在项目中,而另一个在项目中,这是正确的,这不是你想要的。你只希望它是真的如果 也不 在项目中。

    换言之,你要么 全部的 不在项目中?”

    if all([simbol1 not in item, simbol2 not in item]):
    

    或者“是” 没有人 在项目中?”

    if not any([simbol1 in item, simbol2 in item]):
    

    然而,当你只有一个固定的清单,上面有两样东西时,通常使用起来比较容易 and or 而不是 any all 同样,就像英语一样:

    if symbol1 not in item and simbol2 not in item:
    

    或:

    if not (simbol1 in item or simbol2 in item):
    

    另一方面,如果有一大堆符号要检查,或者有一个直到运行时才知道的符号列表,则需要一个循环:

    if all(simbol not in item for simbol in (simbol1, simbol2)):
    
    if not any(simbol in item for simbol in (simbol1, simbol2)):