通过 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)
我有一个列表,我正在尝试遍历该列表并为列表中每个数字的编号编制索引。总列表大约有 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)