Python:如何将iterable的内容添加到集合中?

2024-04-26 20:45:09 发布

您现在位置:Python中文网/ 问答频道 /正文

将iterable的所有项添加到现有的set中的"one [...] obvious way"是什么?


Tags: iterableonewaysetobvious
3条回答

为了让任何人相信在一个循环中做aset.add()与做aset.update()具有竞争性的性能,下面是一个如何在上市前快速测试自己信念的示例:

>\python27\python -mtimeit -s"it=xrange(10000);a=set(xrange(100))" "a.update(it)"
1000 loops, best of 3: 294 usec per loop

>\python27\python -mtimeit -s"it=xrange(10000);a=set(xrange(100))" "for i in it:a.add(i)"
1000 loops, best of 3: 950 usec per loop

>\python27\python -mtimeit -s"it=xrange(10000);a=set(xrange(100))" "a |= set(it)"
1000 loops, best of 3: 458 usec per loop

>\python27\python -mtimeit -s"it=xrange(20000);a=set(xrange(100))" "a.update(it)"
1000 loops, best of 3: 598 usec per loop

>\python27\python -mtimeit -s"it=xrange(20000);a=set(xrange(100))" "for i in it:a.add(i)"
1000 loops, best of 3: 1.89 msec per loop

>\python27\python -mtimeit -s"it=xrange(20000);a=set(xrange(100))" "a |= set(it)"
1000 loops, best of 3: 891 usec per loop

看起来循环方法的每项成本是update方法的三倍多。

使用|= set()的成本大约是update所做成本的1.5倍,但是在循环中添加每个单独项所做成本的一半。

可以将list的元素添加到set中,如下所示:

>>> foo = set(range(0, 4))
>>> foo
set([0, 1, 2, 3])
>>> foo.update(range(2, 6))
>>> foo
set([0, 1, 2, 3, 4, 5])

可以使用set()函数将iterable转换为set,然后使用标准的set update运算符(|=)将新集合中的唯一值添加到现有集合中。

>>> a = { 1, 2, 3 }
>>> b = ( 3, 4, 5 )
>>> a |= set(b)
>>> a
set([1, 2, 3, 4, 5])

相关问题 更多 >