有没有办法在python中使用列表推导中的两个if条件

时间:2012-07-31 13:06:53

标签: python list

假设我有一个列表

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

现在我想忽略列表中以9118开头的字符串,如下所示

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

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

如果条件符合列表中的条件,是否还要写两个?

3 个答案:

答案 0 :(得分:22)

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

请注意,您不应将list用作变量名称,它会影响内置函数。

答案 1 :(得分:9)

如果您有两个以上的值(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']
>>> 

答案 2 :(得分:1)

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

if ((not '91' in i) and (not '18' in i))