我有一点问题 - 我需要遍历列表列表(文件中的行)并计算行以六或七行开头的次数。这没问题,但我还需要删除重复的项目,例如:如果我有这个:[6,6,7,7,6],我需要做到这一点:[6,7,6] - 它是重要的开关数量。但不知何故,列表索引总是超出范围。为什么? 谢谢!
def number_of_switches(list):
counter = []
for element in li:
if int(element[0]) == 6 or int(element[0]) == 7: counter.append(element[0])
else: pass
i = 0
for i in (0, len(counter)):
if counter[i] == counter[i+1]: counter.remove(counter[i+1])
print 'number of switches is', len(counter)-1 #the first number doesn't count as switch, hence '-1'
答案 0 :(得分:2)
for i in (0, len(counter))
仅迭代两个元素:0和counter
的长度。 不从0到长度计数。为此你需要范围:
for i in range(len(counter))
但是,你也不应该这样做。想想每次删除元素时会发生什么:列表现在缩短了一个,但是您要迭代直到原始列表的末尾。所以你很快就会得到一个IndexError。您需要将不匹配的元素附加到 new 列表,而不是从当前列表中删除。
答案 1 :(得分:0)
您应该for i in range(len(counter)):
,if counter[i] == counter[i+1]:
也会在此范围内出错。你需要处理最终案例。
这可能是更好的解决方案:
def number_of_switches(list):
counter = []
prev = li[0]
for element in range(1, len(li)):
if int(li[element][0]) != prev:
count.append(int(li[element][0]))
print 'number of switches is', len(counter)-1 #the first number doesn't count as switch, hence '-1'
答案 2 :(得分:0)
当你写:
for i in (0, len(counter)):
这意味着在这两个值中:0和len(计数器)和len(计数器)是超出范围的索引。 我想你的意思是:
for i in range(0, len(counter)):