Python:如何在具有重复项的列表中的另一个索引后一致地找到下一个索引?

时间:2017-03-23 00:45:52

标签: python

很抱歉,如果问题不够明确,我对python很新。如果我的代码中有任何拼写错误,我也会提前道歉。

说我有一个清单

list = [a,b,c,a,x,y,b,m,a,z]

我希望使用for循环在每个'a'之后获取元素的索引值并将其存储在dict中。 (这假定dict = {}已经存在)

for store in list:
    if dict.has_key(store) == False:
        if list.index(store) != len(list)-1:
            dict[store] = []
            dict[store].append(list[list.index(store)+1])
    else:
        if list.index(store) != len(list)-1:
            dict[store].append(list[list.index(store)+1])

理想情况下,我希望我的词典

dict = {'a':['b','x','z'], 'b':['c','m'], 'c':['a']....etc.}

相反,我得到了

dict = {'a':['b','b','b'], 'b':['c','c'], 'c':['a']...etc.}

我意识到这是因为索引只找到第一次出现的变量存储。我如何构建我的代码,以便对于商店的每个值,我可以找到该特定值的下一个索引,而不仅仅是第一个?

另外,我想知道如何仅使用for循环执行此操作;没有递归或者等等(如果陈述很明显)。

如果我的问题不明确或者我的代码很乱,我再次道歉。

2 个答案:

答案 0 :(得分:1)

你可以这样做:

l = ['a','b','c','a','x','y','b','m','a','z']
d={}
for i in range(len(l)-1):
    if not l[i] in d:
        d[l[i]] = []
    d[l[i]].append(l[i+1])

然后d

{'a': ['b', 'x', 'z'],
 'b': ['c', 'm'],
 'c': ['a'],
 'm': ['a'],
 'x': ['y'],
 'y': ['b']}

关于您的代码,您无需使用index,因为您已经在列表中进行了枚举,因此您无需搜索当前元素的位置。此外,您可以枚举len(l)-1,这样可以简化代码。您的代码中的问题是list.index(store)总是在store中找到list的第一次出现。

答案 1 :(得分:0)

这看起来像defaultdict的工作。此外,您应该避免使用listdict作为变量,因为它们是保留字。

from collections import defaultdict

# create a dictionary that has default value of an empty list
# for any new key
d = defaultdict(list)

# create the list
my_list = 'a,b,c,a,x,y,b,m,a,z'.split(',')

# create tuples of each item with its following item
for k,v in zip(my_list, my_list[1:]):
    d[k].append(v)

d 
# returns:
defaultdict(list,
            {'a': ['b', 'x', 'z'],
             'b': ['c', 'm'],
             'c': ['a'],
             'm': ['a'],
             'x': ['y'],
             'y': ['b']})