【发布时间】:2011-01-12 21:00:37
【问题描述】:
我想从两个不同的独特项目列表中创建一个列表。
还有其他类似的问题,但似乎没有人关心如何有效地解决这个问题,因为列表有几百万个项目。
完全不相关:我是唯一一个讨厌标签建议框如何掩盖“发布您的问题”按钮的人吗?
【问题讨论】:
-
列表中项目的顺序重要吗?
标签: python
我想从两个不同的独特项目列表中创建一个列表。
还有其他类似的问题,但似乎没有人关心如何有效地解决这个问题,因为列表有几百万个项目。
完全不相关:我是唯一一个讨厌标签建议框如何掩盖“发布您的问题”按钮的人吗?
【问题讨论】:
标签: python
使用set。
>>> first = [1, 2, 3, 4]
>>> second = [3, 2, 5, 6, 7]
>>> third = list(set(first) | set(second)) # '|' is union
>>> third
[1, 2, 3, 4, 5, 6, 7]
【讨论】:
third 中的结果列表将不会必然被排序/排序,因为设置散列其组件的方式。如果需要对结果进行排序,请使用sorted()。
一种更有效的方法:
>>> first = [1, 2, 3, 4]
>>> second = [3, 2, 5, 6, 7]
# New way
>>> list(set(first + second))
[1, 2, 3, 4, 5, 6, 7]
#1000000 loops, best of 3: 1.42 µs per loop
# Old way
>>> list(set(first) | set(second))
[1, 2, 3, 4, 5, 6, 7]
#1000000 loops, best of 3: 1.83 µs per loop
新方法效率更高,因为它只有一个 set() 而不是 2 个。
【讨论】:
>>> l1 = range(10)
>>> l2 = range(5, 15)
>>> set(l1) | set(l2)
set([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])
【讨论】:
如果有人想在没有set() 的情况下这样做:
a = [1,2,3]
b = [2,3,4]
newlist=[]
for i in a:
newlist.append(i)
for z in b:
if z not in newlist:
newlist.append(z)
newlist.sort()
print newlist
【讨论】:
清洁和专业的解决方案:
list = [1, 2, 3]
list1 = [3, 4, 5]
result = list(set().union(list, list1)) # result [1, 2, 3, 4, 5]
【讨论】: