【发布时间】:2021-08-09 19:14:54
【问题描述】:
我有两个列表:
from secrets import token_urlsafe
a = [token_urlsafe() for i in range(100)]
b = a[50:]
我需要找出这两个列表之间的区别。我使用集合推导还是集合差异?
Python 文档描述了执行此操作的两种方法
设置差异
set(a) - set(b)
返回一个新集合,该集合中的元素不在其他集合中
设置理解
{i for i in a if i not in b}
使用集合推导:
{c for c in 'abracadabra' if c not in 'abc'}
【问题讨论】:
-
好吧,这里的集合理解肯定会慢一些,因为
b是一个列表。它应该是set,所以你可以使用b = set(a[50:]) -
@khelwood 这个问题是有效的,因为
setPython 文档提到了集合理解,并给出了与上面类似的示例,而没有评论性能影响。见:docs.python.org/3/library/stdtypes.html#set -
谢谢,@juanpa.arrivillaga!引发这个问题的原因是 Python 文档在使用集合理解时不会创建集合,并没有提到预先转换为
set。事实上,它使用了明确的string。 -
引用的有关集合推导的 Python 文档不建议您使用该示例来确定集合差异。它显示了理解的语法。
-
@martineau 引用的关于集合理解的 Python 文档是否具有集合效果具有集合理解?是的,它确实。作为阅读设置文档的人,我是否想知道它会更快还是更慢?是的,我做到了。我希望其他人也有同样的问题,所以我在这个问答网站上记录了它。如果您想跟进此对话,请随时在场外给我发电子邮件。我将不再在这里跟进。祝你有美好的一天!