Python列表理解,具有独特的项目

rec*_*gle 8 python list-comprehension list

有没有办法在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)
Run Code Online (Sandbox Code Playgroud)

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

订单也很重要,所以我不能只使用集合理解.

Mic*_*ael 18

好吧,没有有序集,但我们可以滥用OrderedDict:

from collections import OrderedDict
t = "never gonna give you up"
OrderedDict.fromkeys(t).keys()
Run Code Online (Sandbox Code Playgroud)

得到:

['n', 'e', 'v', 'r', ' ', 'g', 'o', 'a', 'i', 'y', 'u', 'p']
Run Code Online (Sandbox Code Playgroud)

  • 那么`OrderedDict.fromkeys(t).keys()`呢?[请注意,这种方法以及设置方法将我们限制为可清除元素. (3认同)

小智 9

你最初的想法适用于一套理解:

new_items = {unicode(item) for item in items}
Run Code Online (Sandbox Code Playgroud)


Dun*_*nes 6

我简短的一个班轮可能是:

s = "some string"
unique_items = [unicode(ch) for ch in sorted(set(s), key=s.index)]
Run Code Online (Sandbox Code Playgroud)