在Python中从列表中的列表创建总和?
我不太确定该怎么问这个问题,而且我对编程也不是很有经验,所以你必须原谅我。无论如何,我有个问题。基本上,我需要算出一些数字的和,还有平均数 程序应该具有用户输入值。他们输入一个月和一个与该月相关的数字,然后我需要得到平均值。所以我有一个大的列表,然后是列表中的列表。基本上是这样的:在Python中从列表中的列表创建总和?,python,python-3.x,Python,Python 3.x,我不太确定该怎么问这个问题,而且我对编程也不是很有经验,所以你必须原谅我。无论如何,我有个问题。基本上,我需要算出一些数字的和,还有平均数 程序应该具有用户输入值。他们输入一个月和一个与该月相关的数字,然后我需要得到平均值。所以我有一个大的列表,然后是列表中的列表。基本上是这样的: months = [["January", 3.45], ["February", 7.1865], ["March", 4.56]] 我想知道的是,如何在每个列表中挑出第二个元素? 我想我可以使用for循
months = [["January", 3.45], ["February", 7.1865], ["March", 4.56]]
我想知道的是,如何在每个列表中挑出第二个元素?
我想我可以使用for循环并将数字编译成一个单独的列表,但我尝试了,但无法正确计算。要提取每个列表中的第二个元素:
numbers = [i[1] for i in months]
如果要获得所有数字的总和:
numbersum = sum(numbers)
要提取每个列表中的第二个元素,请执行以下操作:
numbers = [i[1] for i in months]
如果要获得所有数字的总和:
numbersum = sum(numbers)
列表理解可以帮助您:
names = [item[0] for item in months]
numbers = [item[1] for item in months]
如果您只是使用普通for循环,事情会变得更加混乱:
names = []
numbers = []
for item in months:
names.append(item[0])
numbers.append(item[1])
列表理解可以帮助您:
names = [item[0] for item in months]
numbers = [item[1] for item in months]
如果您只是使用普通for循环,事情会变得更加混乱:
names = []
numbers = []
for item in months:
names.append(item[0])
numbers.append(item[1])
另一个选项是:
另一个选项是:
还没有人说过这句话:
sum(x[1] for x in monthlist)
正如下面的评论中所提到的,如果您知道monthlist中的每个元素都是可编辑的,并且正好有2个元素,那么您可以通过在运行过程中解压元组使其更加明确:
sum(value for month,value in monthlist)
这不会创建一个只传递给sum的中间列表。这就是发电机的美妙之处。这里真正的美妙之处在于,如果monthlist是某种懒惰的迭代器,例如文件对象。然后,您可以对其求和,而无需一次在内存中存储多个元素:
#code to sum the first column from a file:
with open(file) as f:
first_col_sum = sum(float(line.split()[0]) for line in f)
还没有人说过这句话:
sum(x[1] for x in monthlist)
正如下面的评论中所提到的,如果您知道monthlist中的每个元素都是可编辑的,并且正好有2个元素,那么您可以通过在运行过程中解压元组使其更加明确:
sum(value for month,value in monthlist)
这不会创建一个只传递给sum的中间列表。这就是发电机的美妙之处。这里真正的美妙之处在于,如果monthlist是某种懒惰的迭代器,例如文件对象。然后,您可以对其求和,而无需一次在内存中存储多个元素:
#code to sum the first column from a file:
with open(file) as f:
first_col_sum = sum(float(line.split()[0]) for line in f)
也许这只是一个回答,而不是评论。拉链功能的工作原理类似于拉链,结合了匹配的元素:
>>> zip([1,2,3],[4,5,6])
<zip object at 0xb6e5beec>
>>> list(zip([1,2,3],[4,5,6]))
[(1, 4), (2, 5), (3, 6)]
因此,我们可以使用zip来分解您的列表:
>>> list(zip(*months))
[('January', 'February', 'March'), (3.45, 7.1865, 4.56)]
>>> monthnames, numbers = zip(*months)
>>> monthnames
('January', 'February', 'March')
>>> numbers
(3.45, 7.1865, 4.56)
如果您只关心其中一个,则效率会稍低,但这是一个需要熟悉的有用习惯用法 不妨将此作为回答而不是评论。拉链功能的工作原理类似于拉链,结合了匹配的元素:
>>> zip([1,2,3],[4,5,6])
<zip object at 0xb6e5beec>
>>> list(zip([1,2,3],[4,5,6]))
[(1, 4), (2, 5), (3, 6)]
因此,我们可以使用zip来分解您的列表:
>>> list(zip(*months))
[('January', 'February', 'March'), (3.45, 7.1865, 4.56)]
>>> monthnames, numbers = zip(*months)
>>> monthnames
('January', 'February', 'March')
>>> numbers
(3.45, 7.1865, 4.56)
如果您只关心其中一个,则效率会稍低,但这是一个需要熟悉的有用习惯用法 添加,因为我还没有看到它
>>> map(None,*months)
[('January', 'February', 'March'), (3.4500000000000002, 7.1864999999999997, 4.5599999999999996)]
所以mapNone,*months[1]是您要查找的列表。添加,因为我还没有看到它
>>> map(None,*months)
[('January', 'February', 'March'), (3.4500000000000002, 7.1864999999999997, 4.5599999999999996)]
因此,mapNone,*months[1]是您要寻找的列表。聪明。我没有想到这个是zip。我可能想评论一下,在py2k上,zip*months返回一个列表,而在py3k上,它是一个迭代器zip对象。聪明。我本不会想到zip。可能想评论一下,在py2k上,zip*months返回一个列表,而在py3k上,它是一个迭代器zip对象。我也喜欢命名的版本:sumnum表示名称,num表示月份列表,尽管它对结构进行了硬编码,而不是x[1]。@DSM-也添加了该版本,谢谢。通常在这种情况下,我会使用sumnum作为num,monthlist中的num,但现在我开始重新思考这个问题。毕竟,为什么不提醒自己monthlist实际上存储了什么?我也喜欢命名的版本:sumnum代表名称,num in monthlist,尽管它比x[1]更硬编码结构。@DSM-也添加了该版本,谢谢。通常在这种情况下,我会使用sumnum作为num,monthlist中的num,但现在我开始重新思考这个问题。毕竟,为什么不提醒自己monthlist实际上存储了什么呢?这是因为mapNone,*x和zip*x是一样的。我认为这在Python3中不起作用。listmapNone,*months给出TypeError:“非类型”对象不可调用;我认为他们删除了None快捷方式。这是因为mapNone,*x与zip*x相同。我认为这在Python 3中实际上不起作用。listmapNone,*months给出TypeError:“非类型”对象不可调用;我想他们取消了捷径。