在以下代码中显示列表或元组索引超出范围的错误

时间:2019-02-21 18:28:00

标签: python-3.x tuples

我写了一个代码。我希望此代码的工作方式已评论。因此,您可以尝试了解目的(通常是计算元素的平均值)。但是,当我运行函数rainaverage的实际代码时,它显示列表索引超出范围错误,而当我进行一些调整以修复它时,它显示出元组超出范围错误。因此,您的帮助将不胜感激:

'''L1=[(2,3),(4,3),(5,6),(2,5)]
m=L1[0][1]
b=L1[0][0]
n=L1[3][1]
a=(m+n)/2
L1.pop([0][0])
L1.pop([2][0])
L2=(b,a)
L1=list(L1)
L1.append(L2)
L1=tuple(L1)
print(L1)'''
def rainaverage(l):
    for i in range(len(l)):
        for j in range(len(l)):
            if(l[i]==l[j+1]):
                m=l[i][1]
                n=l[j+1][1]
                b=l[0][0]
                a=(m+n)/2
                l = list(l)
                l.pop([i][0])
                l.pop([j+1][0])
                l2=(b,a)

                l.append(l2)
                l=tuple(l)

    print(l)

l3=[(1,2),(1,3),(2,3),(1,1),(3,8)]
rainaverage(l3)

1 个答案:

答案 0 :(得分:0)

最简单的方法是使用字典将第一个值映射到第二个值的列表。然后,您可以分别获取这些列表的平均值

from collections import defaultdict

def rainaverage(l):
    d = defaultdict(list)
    for a, b in l:
        d[a].append(b)
    return [(k, sum(v)/len(v)) for k, v in d.items()]

L1=[(2,3),(4,3),(5,6),(2,5)]

print(rainaverage(L1))
# [(2, 4.0), (4, 3.0), (5, 6.0)]
print(rainaverage([(1,2),(1,3),(2,3),(1,1),(3,8)]))
# [(1, 2.0), (2, 3.0), (3, 8.0)]