两个条件循环python

时间:2018-08-06 18:06:54

标签: python loops if-statement

我的数据如下

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 个答案:

答案 0 :(得分:3)

您可以使用<include android:id="@+id/my_toolbar" layout="@layout/my_toolbar"/>并按如下所示合并两个list comprehension

if

您还可以使用>>> lst = ['abs', '@abs', '&abs'] >>> new_lst = [l for l in lst if '@' not in l and '&' not in l] >>> new_lst ['abs'] >>> 代替多个all(),如下所示:

if

答案 1 :(得分:2)

您可以将两个if组合在一起:

if simbol1 not in item and simbol2 not in item:
    new.append(item)

答案 2 :(得分:2)

f

答案 3 :(得分:1)

Functionally,您可以

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

作为解释,lambda函数可确保所有计算为f的值中,filtering都不禁止使用False字符串。 filter返回一个生成器,因此可以将其生成为list

答案 4 :(得分:1)

oneup_flysystem.gallery_filesystem:
    class: League\Flysystem\Filesystem
    public: true

答案 5 :(得分:1)

您的代码非常正确;唯一的问题是您将否定取反。

此:

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

…问:“这些物品中是否有没有?”就像英语一样,如果其中一个不在项目中,而另一个在项目中,那是正确的,这不是您想要的。如果项目中没有 ,则只希望它为true。

换句话说,您想要“这些商品中的全部吗?”

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

...或“项目中是否没有这些符号?”

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

但是,当您只有两个这样的固定列表时,通常更容易使用andor而不是anyall-就像英文一样:

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