在Python 3列表中查找唯一值索引的最有效方法

时间:2017-09-27 17:48:11

标签: python python-3.x

查找列表中仅出现一次的字符串索引的最有效方式是什么?

foo = ['it', 'does', 'it', 'very', 'very', 'well']
bar = ???  # bar = [1, 5]

我已经了解集合,词典和列表推导。我在这里试图解决的问题是在我的生产代码中我有并行数据列表,其中索引是许多因历史原因无法更改的索引。

4 个答案:

答案 0 :(得分:3)

使用collections.Counter子类:

import collections

foo = ['it', 'does', 'it', 'very', 'very', 'well']
counts = collections.Counter(foo)
result = [i for i,v in enumerate(foo) if counts[v] == 1]

print(result)

输出:

[1, 5]

答案 1 :(得分:0)

你会得到你想要的。字典中的字典更快

from collections import Counter
foo = ['it', 'does', 'it', 'very', 'very', 'well']
d = dict(Counter(foo))
[i for i,v in enumerate(foo) if counts[v]  == 1]

您也可以使用set(foo)

答案 2 :(得分:0)

你可以尝试这样的事情,特别是如果你的foo列表的大小比上面的例子大,并且有很多重复。

T

答案 3 :(得分:-2)

这取决于您希望获得的效率类型。你可以直接在列表理解中做到这一点,直截了当,可读:

  

bar = [index for index,el in enumerate(foo)if foo.count(el)== 1]

如果您想使用计数器

,请参阅this