在列表

时间:2015-09-12 15:20:33

标签: python python-3.x

我有一个如下所示的列表:

listWords = ['foo', 'bar', 'foobar', 'foo', 'bar']

然后我想在列表中使用枚举来获取单词位置,但输出应该如下所示:

foo [0,3]
bar [1,4]
foobar [2]

我正在考虑使用一个集合,因为它将获取唯一值,然后使用索引的计数器进行枚举?

2 个答案:

答案 0 :(得分:3)

使用字典,并为值列表添加索引:

indices_per_word = {}
for index, word in enumerate(listWords):
    indices_per_word.setdefault(word, []).append(index)

对于您的样本,这会产生:

>>> listWords = ['foo', 'bar', 'foobar', 'foo', 'bar']
>>> indices_per_word = {}
>>> for index, word in enumerate(listWords):
...     indices_per_word.setdefault(word, []).append(index)
... 
>>> indices_per_word
{'bar': [1, 4], 'foo': [0, 3], 'foobar': [2]}
>>> for word, indices in indices_per_word.items():
...     print(word, indices)
... 
bar [1, 4]
foo [0, 3]
foobar [2]

答案 1 :(得分:0)

可以使用defaultdict来完成,如下所示:

from collections import defaultdict

indices_per_word = defaultdict(list)
for index, word in enumerate(listWords):
    indices_per_word[word].append(index)

indices_per_word

defaultdict(<type 'list'>, {'foobar': [2], 'foo': [0, 3], 'bar': [1, 4]})