我开始使用 Python,目前正在学习列表推导,所以这听起来可能很奇怪。
问题:是否可以使用列表推导来创建在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,目前正在学习列表推导,所以这听起来可能很奇怪。
问题:是否可以使用列表推导来创建在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]
您可以在列表推导中嵌套任何 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]
我知道您在询问列表推导,但我想指出,使用s会更好地解决这个特定问题。set
您想要的结果是 sett
和的差异s
:
>>> t = {1,2,3,4,5}
>>> s = {1,3,5}
>>>
>>> t - s
set([2, 4])
>>>
>>> t.difference(s)
set([2, 4])
只是希望扩展您对 Python 提供给您的工具的了解。
为了提高效率,请使用一组:
mySet = set(s)
result = [x for x in t if x not in mySet]
测试集合的成员资格是 O(1),但测试列表中的成员资格是 O(n)。