我是否应该检查一个元素是否已经存在于集合中,或者只是使用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]
选择一种方法优于另一种方法是否有优势?
答案 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}