通过 python 中的列表编制索引

Indexing through a list in python

我有一个列表,我正在尝试遍历该列表并为列表中每个数字的编号编制索引。总列表大约有 1500-2000 个数字,其中每个数字代表主体行为。我通过 excel sheet:

导入了数字列表
import openpyxl
from openpyxl import load_workbook
wb = load_workbook('/data.xlsx')
ws = wb['bhv.TrialError'] 
trialerror10_22=[]
for column in ws.columns:
    for cell in column:
        trialerror10_22=(cell.value)
        print(trialerror10_22)

这一切都很好,并且在列表中打印出我的 1500 个左右的数字。接下来我尝试索引数字,范围从 0 到 9,并按以下顺序与标签相关联:

labels = ['C','NR', 'LR', 'BF', 'NF', 'ER', 'IR', 'LB', 'I', 'A']

def bhvread(trialerror10_22):
    test=False
    results = [0] * (max(data) + 1)
    for val in data:
        results[val] +=1
    return results


for index, val in enumerate(results):
    print(index, labels[index], val)

但是当我 运行 这部分时它说 Index Error: list index out of range 并指向我代码的最后一行。

输出:

0 C 1
1 NR 0
2 LR 0
3 BF 0
4 NF 0
5 ER 0
6 IR 0
7 LB 0
8 I 0
9 A 0

更新二:

如果我对你的理解是正确的,你想做类似的事情:

data = [0, 1, 2, 0, 1, 0, 9, 8]
#dictionary keeping track of our number counters
results = {0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0}
labels = ['C', 'NR', 'LR', 'BF', 'NF', 'ER', 'IR', 'LB', 'I', 'A']

for x in data:
    #is the data valid?
    if x >= 0 and x < 10:
        results[x] += 1 #increment the correct entry in the dict

#print everything
for i in range(10):
    print(i, labels[i], results[i])

输出

0 C 3
1 NR 2
2 LR 1
3 BF 0
4 NF 0
5 ER 0
6 IR 0
7 LB 0
8 I 1
9 A 1

原文:

问题肯定出在 labels[index]

如果 len(results) 大于 10,您将 运行 在第十次迭代时遇到麻烦。

示例:

results = [1,2,3,4,5,6,7,8,9,10,11]
#len(results) = 11

#first run
index    v
results [1   , 2  , 3  , 4   , 5   , 6   , 7   , 8   , 9  , 10   , 11]
labels  ['C','NR', 'LR', 'BF', 'NF', 'ER', 'IR', 'LB', 'I', 'A']

#second run
index          v
results [1   , 2  , 3  , 4   , 5   , 6   , 7   , 8   , 9  , 10   , 11]
labels  ['C','NR', 'LR', 'BF', 'NF', 'ER', 'IR', 'LB', 'I', 'A']

#More runs

#tenth run
index                                                       v
results [ 1  , 2  , 3  , 4   , 5   , 6   , 7   , 8   , 9  , 10   , 11]
labels  ['C','NR', 'LR', 'BF', 'NF', 'ER', 'IR', 'LB', 'I', 'A']

#eleventh run
index                                                              v
results [ 1  , 2  , 3  , 4   , 5   , 6   , 7   , 8   , 9  , 10   , 11]
labels  ['C','NR', 'LR', 'BF', 'NF', 'ER', 'IR', 'LB', 'I', 'A'] #INDEX ERROR!!!

目前还不清楚您要完成什么,但我希望这能让您走上正轨。

更新:

正如@Elzell 所说,您可能想要使用 itertools.cycle

import itertools
#...
labels_iterator = itertools.cycle(labels)

for index, val in enumerate(results):
    print(index, labels_iterator.next() , val)