有没有办法在Python中创建只包含唯一项的列表解析?
我最初的想法是使用这样的东西:
new_items = [unicode(item) for item in items]
然而,我后来意识到我需要省略重复的项目。所以我最终得到了这个丑陋的怪物:
unique_items = []
for item in items :
unicode_item = unicode(item)
if unicode_item not in unique_items :
unique_items.append(unicode_item)
现在这远不如简单的列表理解那么漂亮(和可读)。那么,有没有办法使列表理解等同于上面的代码?
顺序也很重要,所以我不能只使用集合理解。
答案 0 :(得分:17)
好吧,没有有序集,但我们可以滥用OrderedDict:
from collections import OrderedDict
t = "never gonna give you up"
OrderedDict.fromkeys(t).keys()
给出:
['n', 'e', 'v', 'r', ' ', 'g', 'o', 'a', 'i', 'y', 'u', 'p']
答案 1 :(得分:7)
您最初的想法适用于理解:
new_items = {unicode(item) for item in items}
答案 2 :(得分:6)
我简短的一个班轮可能是:
s = "some string"
unique_items = [unicode(ch) for ch in sorted(set(s), key=s.index)]
答案 3 :(得分:4)
使它成为辅助函数,就像这样。
def unique_iter(iterable):
seen = set()
for item in iterable:
if item in seen:
continue
seen.add(item)
yield item
for ch in unique_iter("never gonna give you up"):
print ch,
输出
n e v r g o a i y u p