Python 列表理解和 "不在 "中

问题描述 投票:22回答:4

我正在开始学习Python,目前正在学习列表理解,所以这听起来可能真的很奇怪。

问题是 是否可以使用 list 理解法来创建一个元素列表,在 t 不见于 s?

我尝试了下面的方法,但它给了我一个错误。

>>> t = [1, 2, 3, 4, 5]
>>> s = [1, 3, 5]
>>>[t for t not in s]

[t for t not in s]
           ^
SyntaxError: invalid syntax
python python-2.x
4个回答
40
投票

试试这个。

[x for x in t if x not in s]

你可以在list comprehensions中嵌套任何for if语句。试试这个身份,可以得到真正长的条件链,对代码的作用有更清晰的直观认识。

my_list = [(x,a)
           for x in t
           if x not in s
           if x > 0
           for a in y
           ...]

看到了吗?


4
投票
[item  for item  in t if item not in s]

1
投票

为了更好的效率,请使用一个集合。

mySet = set(s)
result = [x for x in t if x not in mySet]

测试一个集合的成员资格是O(1), 但测试一个列表的成员资格是O(n).


1
投票

我知道你问的是关于列表理解的问题,但我想指出的是 这个 问题最好用 sets. 你想要的结果是set ts:

>>> t = {1,2,3,4,5}
>>> s = {1,3,5}
>>>
>>> t - s
set([2, 4])
>>>
>>> t.difference(s)
set([2, 4])

只是希望能扩展你对Python提供给你的工具的认识。

© www.soinside.com 2019 - 2024. All rights reserved.