我正在开始学习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
试试这个。
[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
...]
看到了吗?
[item for item in t if item not in s]
为了更好的效率,请使用一个集合。
mySet = set(s)
result = [x for x in t if x not in mySet]
测试一个集合的成员资格是O(1), 但测试一个列表的成员资格是O(n).
我知道你问的是关于列表理解的问题,但我想指出的是 这个 问题最好用 set
s. 你想要的结果是set t
和 s
:
>>> t = {1,2,3,4,5}
>>> s = {1,3,5}
>>>
>>> t - s
set([2, 4])
>>>
>>> t.difference(s)
set([2, 4])
只是希望能扩展你对Python提供给你的工具的认识。