我有一个这样的名单:如何使用此列表仅使用唯一元素创建列表?
a = [['Rostock', 'Lubeck'], ['Rostock', 'Hamburg'], ['Rostock', 'Bremen'], ['Rostock', 'Hannover']]
我只想用独特的元素创建列表:
result = ['Rostock', 'Lubeck', 'Hamburg', 'Bremen', 'Hannover']
我怎么能这样做?由于
我有一个这样的名单:如何使用此列表仅使用唯一元素创建列表?
a = [['Rostock', 'Lubeck'], ['Rostock', 'Hamburg'], ['Rostock', 'Bremen'], ['Rostock', 'Hannover']]
我只想用独特的元素创建列表:
result = ['Rostock', 'Lubeck', 'Hamburg', 'Bremen', 'Hannover']
我怎么能这样做?由于
假设为了事项
>>> a = [['Rostock', 'Lubeck'], ['Rostock', 'Hamburg'], ['Rostock', 'Bremen'], ['Rostock', 'Hannover']]
>>> from collections import OrderedDict
>>> list(OrderedDict.fromkeys(y for x in a for y in x))
['Rostock', 'Lubeck', 'Hamburg', 'Bremen', 'Hannover']
或等价:
>>> from itertools import chain
>>> list(OrderedDict.fromkeys(chain.from_iterable(a)))
如果顺序并不重要 - 使用set:
a = [['Rostock', 'Lubeck'], ['Rostock', 'Hamburg'], ['Rostock', 'Bremen'], ['Rostock', 'Hannover']]
print list(set(y for x in a for y in x)) # prints ['Rostock', 'Hannover', 'Bremen', 'Lubeck', 'Hamburg']
我觉得这更容易阅读:
a = [['Rostock', 'Lubeck'], ['Rostock', 'Hamburg'], ['Rostock', 'Bremen'], ['Rostock', 'Hannover']]
result = []
for x in a:
for y in x:
if y not in result:
result.append(y)
这是输出:
>>> print(result)
['Rostock', 'Lubeck', 'Hamburg', 'Bremen', 'Hannover']
感谢队友!订单确实重要。我会尽可能接受你的答案。 – pynovice 2013-04-30 11:18:58
'OrderedDict'的美丽用法 - 我个人使用'chain.from_iterable',但除此之外 - 正是我会用:) – 2013-04-30 11:38:32
@JonClements好点我也将其作为一个选项加入 – jamylak 2013-04-30 11:39:33