33

假设我有一个清单

my_list = ['91 9925479326','18002561245','All the best','good']

现在我想忽略列表中以 下面开头91的字符串18

result = []
for i in my_list:
   if not '91' in i:
      if not '18' in i:
         result.append(i) 

所以在这里我想通过列表推导来实现这一点。

无论如何要在列表理解中写两个 if 条件吗?

4

3 回答 3

43
[i for i in my_list if '91' not in i and '18' not in i]

请注意,您不应将list其用作变量名,它会隐藏内置函数。

于 2012-07-31T13:07:54.850 回答
10

如果您有两个以上的值(91 和 18)或者它们是动态生成的,则最好使用以下构造:

[i for i in my_list if not i.startswith(('91', '18'))]

或者,如果您想检查9118是否在字符串中(不仅在开头),请使用in代替startswith

[i for i in my_list if all(x not in i for x in ['91', '18'])]

使用示例:

>>> my_list = ['91 9925479326','18002561245','All the best','good']
>>> [i for i in my_list if all(not i.startswith(x) for x in ['91', '18'])]
['All the best', 'good']
>>> 
于 2012-07-31T13:27:34.987 回答
2

您可以“合并”这两个条件:

if ((not '91' in i) and (not '18' in i))
于 2012-07-31T13:08:23.413 回答