Python:检查成员资格或只使用add with set

时间:2014-04-10 08:16:02

标签: python set membership

我是否应该检查一个元素是否已经存在于集合中,或者只是使用add()

做得更好

uniq = set()
_ = [uniq.add('%s %s' % (k,hn)) for hn in v if '%s %s' % (k,hn) not in uniq ]

或更好:

uniq = set()
_ = [uniq.add('%s %s' % (k,hn)) for hn in v]

选择一种方法优于另一种方法是否有优势?

1 个答案:

答案 0 :(得分:1)

如果您正在做的只是添加值,那么测试成员资格是没有意义的。您正在做.add()方法已经为您做的额外工作

你应该从不使用列表理解来产生副作用;您创建了一个充满None引用的列表对象,然后再次丢弃它。一个简单的for循环可以更好地理解和维护

在这种情况下,您甚至不需要在循环中调用set.add(),只需使用带有生成器表达式的set.update()

uniq = set()
uniq.update('%s %s' % (k,hn) for hn in v)

其中uniq可能是一个现有的集合,简化为一个例子。如果没有,您可以使用set comprehension从头开始创建您的集合,使用一行代码:

uniq = {'%s %s' % (k,hn) for hn in v}