Python中如何实现特定计算功能

对于列表中的所有数,计算 2 的 i 次幂的和
比如
range (1,5)
sum= 2^1+2^2+2^3+2^4+2^5

刚开始学习,可能问题很初级,还望不吝赐教,非常感谢
Python中如何实现特定计算功能

41 回复

sum([x**x for x in range(1,6)])


我无法理解你的问题

好吧,看错了,底数都是 2,那就是 sum([2**x for x in range(1,6)])

用内置的 map 函数

d = list(range(1, 5))
print(list(map(lambda x: 2 ** x, d)))

res = 0
for i in range(1, 5):
res += 2 ** i
print(res)
你问的时候心里应该就有答案了

sum(2**x for x in range(1,6))

>>> from functools import reduce
>>> reduce(lambda x,y: x+2**y, range(1,6), 0)
62

您这个方法只能打印计算次幂的结果,没有相加




可以的,谢谢解答


我按你的建议执行的时候这样报错,哪里不对吗:

File “<ipython-input-16-74b7a4201d82>”, line 3
res += 2 ** i
^
IndentationError: expected an indented block

等比数列求和公式?

其实是他这一行忘记加四个空格了

复制进来的时候缩进不对啦,自己注意下



我加了缩进以后可以执行成功,不过
range 是( 1,5 )的时候,得到的结果是 30,实际上应该是 2+4+8+16+32=62 才对
这要怎么理解呢?




我又翻了手册,(1,5)=(1,2,3,4)
没有问题了,多谢耐心解答

是 2^(i+1)-2



这个写法好像只对从 1 开始的连续数列有效,不能适应其他变化

python3.6 版本
-------------------------------------------------
from functools import reduce

c = 0
a = range(1, 6)
print(list(a))
for x in list(a):
b = 2 ** x
c += b
print(‘方法 1:’, c)

d = sum(list(2x for x in range(1, 6)))
print(‘方法 2:’, d)

e = sum([2
x for x in range(1, 6)])
print(‘方法 3:’, e)

f = sum(map(lambda x: 2x, range(1, 6)))
print(‘方法 4:’, f)

g = reduce(lambda x, y: x+y, [2
x for x in range(1, 6)])
print(‘方法 5:’, g)
----------------------------------------------------------------------------------------
下面是打印结果:
[1, 2, 3, 4, 5]
方法 1:62
方法 2:62
方法 3:62
方法 4:62
方法 5:62

为啥不用位运算呢

请问是怎么用的?

range(a, b): 2 ** (b + 1) - 2 ** a

如果(a,b)不是连续数列你这个方法就不行了

sum([2<<i for i in 你的列表])/2

不对呢亲
sum([2<<i for i in (1,6)])/2
Out: 66

楼主还在会搞错缩进的阶段,你们秀什么位运算……
帮助新人要像 4L 好同志学习……

哈哈楼里高手很多啊,辣么大表达式都用上,可是新手接触这个太早了

求 1 到 5 范围的话 (1<<6)-1 就行了

reduce(lambda x, y: x + 2 ** y, range(1, 6))

reduce(lambda x, y: x + 2 ** y, range(1, 6), 0)

我竟然没想到可以这么写

等差数列都没学过吗?

啊不对不是等差,反正有公式

两个相减不就行了吗。。。

lz 缩进都不会楼上就别为难 lz 了…



如果不是有规律数列呢,公式也能套用吗?

sum([2**i for i in range(1, 5)]) 列表推导式 最 python 的用法


这是最符合我水平的答案,谢谢

py 的精髓就是简单 易用 复杂,晦涩的不可取 越简单越好 个人觉得

这好像我初中做的数学题


求通项公式是不

回到顶部