首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >迭代列表- Python 3

迭代列表- Python 3
EN

Stack Overflow用户
提问于 2015-02-02 13:34:37
回答 1查看 396关注 0票数 0

我有以下代码,用于打开文件,按列对其进行排序,然后将平均值附加到其中。但是,我不能让for循环迭代每一行.x = list(map(int, sortedlist[1:][1][1:])),我厌倦了把1改为一个名为y的反变量,但是它没有起作用。

下面是文件的样子和代码。

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-02 13:50:23

您希望得到每个子列表的平均值,所以使用每个子列表而不是排序列表:

代码语言:javascript
复制
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从每一行提取所有元素/int并将它们链接在一起:

代码语言:javascript
复制
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]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28278951

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档