Python中如何实现特定计算功能
对于列表中的所有数,计算 2 的 i 次幂的和
比如
range (1,5)
sum= 2^1+2^2+2^3+2^4+2^5
刚开始学习,可能问题很初级,还望不吝赐教,非常感谢
Python中如何实现特定计算功能
我无法理解你的问题
好吧,看错了,底数都是 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)
你问的时候心里应该就有答案了
>>> 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
其实是他这一行忘记加四个空格了
复制进来的时候缩进不对啦,自己注意下
2^(i+1)-1
我加了缩进以后可以执行成功,不过
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([2x 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, [2x 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
哈哈楼里高手很多啊,辣么大表达式都用上,可是新手接触这个太早了
求 1 到 5 范围的话 (1<<6)-1 就行了
reduce(lambda x, y: x + 2 ** y, range(1, 6), 0)
我竟然没想到可以这么写
等差数列都没学过吗?
啊不对不是等差,反正有公式
两个相减不就行了吗。。。
lz 缩进都不会楼上就别为难 lz 了…
如果不是有规律数列呢,公式也能套用吗?
sum([2**i for i in range(1, 5)]) 列表推导式 最 python 的用法
这是最符合我水平的答案,谢谢
py 的精髓就是简单 易用 复杂,晦涩的不可取 越简单越好 个人觉得
这好像我初中做的数学题


