9

有没有办法在 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)

现在这远没有简单的列表理解那么漂亮(和可读)。那么,有没有办法使列表理解等同于上述代码?

顺序也很重要,所以我不能只使用集合理解。

4

4 回答 4

18

好吧,没有有序集,但我们可以误用 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']
于 2012-10-01T22:14:37.280 回答
10

您最初的想法适用于集合理解:

new_items = {unicode(item) for item in items}
于 2014-09-25T07:17:41.233 回答
6

我做空的一个班轮可能是:

s = "some string"
unique_items = [unicode(ch) for ch in sorted(set(s), key=s.index)]
于 2012-10-01T22:12:05.983 回答
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,

输出

内弗戈艾尤普

于 2012-10-01T22:04:11.210 回答