我有以下代码用于打开文件,按列对其进行排序,然后将均值附加到其中。但是,我无法让for循环遍历每一行... x = list(map(int, sortedlist[1:][1][1:]))
我厌倦了将1改为一个名为y的计数器变量,但它没有用。
以下是文件的外观和代码。
Lee,6,3,4
John,11,10,8
Luke,2,3,8
Terry,4,7,6
import sys, csv, operator
from statistics import mean
#Sorts list
reader = csv.reader(open("O:\\Class 1.csv"), delimiter=",")
sortedlist = sorted(reader, key=operator.itemgetter(1), reverse=True)
#Appends average to the end of each row.
for sublist in sortedlist:
x = list(map(int, sortedlist[1:][1][1:])) #HERE'S THE PROBLEM!
x = mean(x)
sublist.append(x)
print(sublist)
print(sortedlist)
答案 0 :(得分:0)
您想获得每个子列表的平均值,因此请使用每个子列表而不是已排序列表:
for sublist in sortedlist:
x = mean(map(int, sublist[1:])) #HERE'S THE PROBLEM!
sublist.append(x)
print(sublist)
print(sortedlist)
[['Lee', '6', '3', '4', 4.333333333333333], ['Terry', '4', '7', '6', 5.666666666666667], ['Luke', '2', '3', '8', 4.333333333333333], ['John', '11', '10', '8', 9.666666666666666]]
如果你想要组合所有列表的平均值,你可以使用itertools.chain
从每行中提取所有元素/整数并将它们链接在一起:
from itertools import chain
x = mean(map(int, chain.from_iterable(row[1:] for row in sortedlist)))
print(x)
6.0
x = list(map(int, chain.from_iterable(row[1:] for row in sortedlist))
print(x)
[6, 3, 4, 4, 7, 6, 2, 3, 8, 11, 10, 8]