检查list.remove(y)中的x在一行中

时间:2017-02-20 17:50:07

标签: python list

使list.remove()作为列表在同一行上执行元素搜索或索引等操作(即make iterable或subscriptable)的方法是什么?例如。我正在尝试以上哪些无法正常工作。

myList = ['a', 'b', 'c']
'a' in myList.remove('b')
'a' in list(myList.remove('c'))

错误:

Traceback (most recent call last):
  File "<pyshell#83>", line 1, in <module>
    'a' in list(myList.remove('c'))
TypeError: 'NoneType' object is not iterable

在第一次回复后编辑。

我要做的是以下内容。

myList = ['a', 'b', 'c']
if 'a' in myList:
    myList.remove('b')
    if 'c' in myList:
         ...

所以我想知道我是否可以在同一个声明中

4 个答案:

答案 0 :(得分:1)

remove对列表进行了编辑并返回None,因此您所做的不起作用。您需要一个函数来返回 new 列表,并删除该元素。如果你真的需要一个单行:

'a' in [x for x in myList if x is not 'b']

答案 1 :(得分:1)

list.remove()函数返回任何内容。

所以你可以分两步检查:

myList = ['a', 'b', 'c']

myList.remove('b')

if 'a' in myList:
  #Some logic

答案 2 :(得分:1)

希望这样做

if 'a' in your_list and 'c' in set(your_list) - {'b'}:
    # some code
    pass

我在这里使用sets。请注意,语句'b'仍然在列表中。

但从逻辑的角度来看,我更喜欢测试这个

{'a', 'c'} <= set(your_list) and 'b' != 'c'

答案 3 :(得分:0)

您可以快速检查列表中是否有b并先将其删除

myList.remove('b') if 'b' in myList else None

然后使用:

'a' in myList

检查列表中是否有'a'(删除'b'