簡體   English   中英

Python列表理解,具有唯一項

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM