我的数据如下
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']
在这种情况下使用多个条件的正确方法是什么?
答案 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]):
但是,当您只有两个这样的固定列表时,通常更容易使用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)):