对于列表中的所有数,计算 2 的 i 次幂的和
比如
range (1,5)
sum= 2^1+2^2+2^3+2^4+2^5
刚开始学习,可能问题很初级,还望不吝赐教,非常感谢
比如
range (1,5)
sum= 2^1+2^2+2^3+2^4+2^5
刚开始学习,可能问题很初级,还望不吝赐教,非常感谢

1 metaquant Jan 3, 2019 sum([x**x for x in range(1,6)]) |
2 metaquant Jan 3, 2019 好吧,看错了,底数都是 2,那就是 sum([2**x for x in range(1,6)]) |
3 Trim21 Jan 3, 2019 用内置的 map 函数 d = list(range(1, 5)) print(list(map(lambda x: 2 ** x, d))) |
4 hflyf123 Jan 3, 2019 res = 0 for i in range(1, 5): res += 2 ** i print(res) 你问的时候心里应该就有答案了 |
5 aijam Jan 3, 2019 sum(2**x for x in range(1,6)) |
6 xpresslink Jan 3, 2019 >>> from functools import reduce >>> reduce(lambda x,y: x+2**y, range(1,6), 0) 62 |
8 talentl OP |
9 talentl OP @hflyf123 我按你的建议执行的时候这样报错,哪里不对吗: File "<ipython-input-16-74b7a4201d82>", line 3 res += 2 ** i ^ IndentationError: expected an indented block |
10 shoujiaxin Jan 3, 2019 via iPhone 等比数列求和公式? |
13 HuahuaWang Jan 3, 2019 2^(i+1)-1 |
14 talentl OP |
16 Cooky Jan 3, 2019 via Android @HuahuaWang 是 2^(i+1)-2 |
17 talentl OP |
18 ivamp Jan 3, 2019 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(2**x 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: 2**x, 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 |
19 czhuyu Jan 3, 2019 为啥不用位运算呢 |
21 hahastudio Jan 3, 2019 range(a, b): 2 ** (b + 1) - 2 ** a |
22 talentl OP @hahastudio 如果(a,b)不是连续数列你这个方法就不行了 |
23 Xiaobaixiao Jan 3, 2019 sum([2<<i for i in 你的列表])/2 |
24 talentl OP |
25 YvesX Jan 3, 2019 楼主还在会搞错缩进的阶段,你们秀什么位运算…… 帮助新人要像 4L 好同志学习…… |
27 msg7086 Jan 3, 2019 求 1 到 5 范围的话 (1<<6)-1 就行了 |
28 Azone Jan 3, 2019 reduce(lambda x, y: x + 2 ** y, range(1, 6)) |
29 Azone Jan 3, 2019 reduce(lambda x, y: x + 2 ** y, range(1, 6), 0) |
30 NB40B938mff85mtq Jan 3, 2019 @hflyf123 我竟然没想到可以这么写 |
33 HuahuaWang Jan 3, 2019 @talentl 两个相减不就行了吗。。。 |
34 alvin666 Jan 3, 2019 via Android lz 缩进都不会楼上就别为难 lz 了... |
35 talentl OP |
36 AlexMercerZ Jan 4, 2019 sum([2**i for i in range(1, 5)]) 列表推导式 最 python 的用法 |
37 talentl OP @AlexMercerZ 这是最符合我水平的答案,谢谢 |
38 AlexMercerZ Jan 4, 2019 @talentl py 的精髓就是简单 易用 复杂,晦涩的不可取 越简单越好 个人觉得 |
39 a226679594 Jan 7, 2019 这好像我初中做的数学题 |
40 talentl OP @a226679594 求通项公式是不 |