我有一个数字列表,如[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
得到一个号码?
这对我不起作用。
#1楼
我只使用带有map()的lambda
a = [1,2,3,4,5,6,7,8,9,10]
b = map(lambda x, y: (x+y)/2.0, fib[:-1], fib[1:])
print b
#2楼
>>> a = range(10)
>>> sum(a)
Traceback (most recent call last):
File "", line 1, in
TypeError: 'int' object is not callable
>>> del sum
>>> sum(a)
45
似乎已在代码中定义了sum并覆盖了默认函数。 所以我删除了它,问题解决了。
#3楼
n = int(input("Enter the length of array: "))
list1 = []
for i in range(n):
list1.append(int(input("Enter numbers: ")))
print("User inputs are", list1)
list2 = []
for j in range(0, n-1):
list2.append((list1[j]+list1[j+1])/2)
print("result = ", list2)
#4楼
所有答案确实显示了程序化和一般方法。 我建议采用针对您的情况的数学方法。 对于长列表,它可以更快。 它的工作原理是因为你的列表是一个最多为n的自然数列表:
假设我们有自然数1, 2, 3, ..., 10 :
>>> nat_seq = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
您可以在列表中使用sum函数:
>>> print sum(nat_seq)
55
您还可以使用公式n*(n+1)/2 ,其中n是列表中最后一个元素的值(此处为: nat_seq[-1] ),因此您可以避免迭代元素:
>>> print (nat_seq[-1]*(nat_seq[-1]+1))/2
55
要生成序列(1+2)/2, (2+3)/2, ..., (9+10)/2您可以使用生成器和公式(2*k-1)/2. (注意点使值浮点)。 生成新列表时必须跳过第一个元素:
>>> new_seq = [(2*k-1)/2. for k in nat_seq[1:]]
>>> print new_seq
[1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5]
在这里,您也可以使用该列表中的sum函数:
>>> print sum(new_seq)
49.5
但你也可以使用公式(((n*2+1)/2)**2-1)/2 ,这样你就可以避免迭代元素:
>>> print (((new_seq[-1]*2+1)/2)**2-1)/2
49.5
#5楼
使用简单的list-comprehension和sum :
>> sum(i for i in range(x))/2. #if x = 10 the result will be 22.5