0

我有一个小问题 - 我需要遍历列表列表(文件中的行)并计算行以六或七开头的次数。没问题,但我还需要删除重复的项目,例如,如果我有这个:[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'
4

3 回答 3

2

for i in (0, len(counter))仅迭代两个元素:0 和counter. 它不0 计数到长度。为此,您需要范围:

for i in range(len(counter))

但是,您也不应该这样做。想想每次删除一个元素时会发生什么:列表现在短了一个,但您正在迭代直到原始列表的末尾。所以你会很快得到一个IndexError。您需要将不匹配的元素附加到列表中,而不是从当前列表中删除。

于 2013-06-14T09:03:19.720 回答
0

当你写:

for i in (0, len(counter)):

这意味着在这两个值中:0 和 len(counter) 并且 len(counter) 是超出范围的索引。我想你的意思是:

for i in range(0, len(counter)):
于 2013-06-14T09:02:23.967 回答
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'
于 2013-06-14T08:56:17.413 回答