在Python中对一个数字列表求和
我有一个数字列表,如[1,2,3,4,5...]
,我想计算(1+2)/2
,对于第二个数字,(2+3)/2
,第三个数字。
`(3+4)/2',以此类推。我怎样才能做到这一点?
我想把第一个数字与第二个数字相加并除以2,然后把第二个数字与第三个数字相加并除以2,以此类推。
另外,我怎样才能对一列数字进行求和?
a = [1, 2, 3, 4, 5, ...]
是这样的。
b = sum(a)
print b
以获得一个数字?
这对我不起作用。
342
20
问题1:所以你想要(元素0+元素1)/2,(元素1+元素2)/2,...等等。
我们做两个列表:一个是除第一个元素外的每个元素,另一个是除最后一个元素外的每个元素。那么我们想要的平均数就是这两个列表中每一对的平均数。我们使用 "zip "从两个列表中取出一对。
我假设你想在结果中看到小数,尽管你的输入值是整数。默认情况下,Python 做的是整数除法:它抛弃了剩余部分。为了把东西全部除完,我们需要使用浮点数。幸运的是,用一个int除以一个float会产生一个float,所以我们只需用
2.0
作为我们的除数,而不是2
。这样。
问题2:
那个使用 "sum "的方法应该是可以的。下面的方法也可以。
另外,你不需要在每一步都把所有东西都分配给一个变量。
print sum(a)
就能正常工作。你必须更具体地说明你到底写了什么,以及它是如何不工作的。
数字的总和列表。
计算n和n-1的一半(如果我的模式正确的话),使用list comprehension。
对相邻元素求和,例如:((1 + 2) / 2) + ((2 + 3) / 2) + ... 使用reduce 和lambdas 。
问题2: 对整数列表进行求和。
如果列表中包含整数作为字符串。
你可以试试这种方式。
似乎代码中某处定义了
sum
,并覆盖了默认函数。 所以我把它删除了,问题就解决了。使用简单的 "列表理解 "和 "求和"。
所有的答案确实都显示出了一种程式化的一般方法。 我建议针对你的情况采用数学方法。 特别是对于长列表,它可以更快。 它的工作原理是,你的列表是一个自然数的列表,直到
n
。假设我们有自然数
1, 2, 3, ..., 10
:你可以在列表上使用
sum
函数。你也可以使用公式
n*(n+1)/2
,其中n
是列表中最后一个元素的值(这里是:nat_seq[-1]
),这样就避免了元素的迭代。要生成序列
(1+2)/2, (2+3)/2, ..., (9+10)/2
,你可以使用一个生成器和公式(2*k-1)/2.
(注意点使数值成为浮点)。 在生成新的列表时,你必须跳过第一个元素。在这里,你也可以对该列表使用
sum
函数。但是你也可以使用公式
((((n*2+1)/2)**2-1)/2
,这样你就可以避免元素的迭代。解决这个问题的最简单方法。
让我们让初学者轻松一点:--------------------------------。
global
关键字将允许在主函数中分配全局变量信息,而不产生一个新的局部变量。这个概念叫做影子。
产出=15
简单明了。
而这里'就是它的样子。
由于Python处理两个列表上的 "map "的方式有些愚蠢,你确实必须截断列表,"a[:-1]"。 如果你使用了
itertools.imap
,它的工作原理更符合你的期望。使用
pairwise
itertools配方。生成器是一种简单的写法。
我使用
while
循环来得到结果。循环浏览列表中的元素,并像这样更新总数。
感谢Karl Knechtel,我能够理解你的问题。 我的解释是
你想对列表中的每个元素进行求和。
第一个问题,使用匿名函数(又称. Lambda函数)。)
第二个问题,也是使用匿名函数(又称Lambda函数)。 Lambda函数)。)
两个问题合并在一行代码中。
使用最适合你的需求的那一个。
我用map()做一个lambda就可以了
本着itertools的精神。 从对子配方中获得灵感。
例子:
试着使用列表式理解法。比如说。