[英]Python list comprehension, with unique items
有沒有辦法在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)
現在,這比簡單的列表理解要簡單得多(而且可讀性強)。 因此,有沒有辦法使列表理解與上述代碼等效?
順序也很重要,所以我不能只使用集合理解。
好吧,沒有有序集,但是我們可以濫用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']
您的原始想法具有一定的理解力:
new_items = {unicode(item) for item in items}
我做空一個班輪可能是:
s = "some string"
unique_items = [unicode(ch) for ch in sorted(set(s), key=s.index)]
像這樣使它成為一個輔助函數。
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,
輸出
nevrgoaiyup
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.