Python 列表理解和遍历列表
输出:Python 列表理解和遍历列表,python,python-3.x,list-comprehension,Python,Python 3.x,List Comprehension,输出:[1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,35,37,39,41] 现在,我想做到: [-1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,35,37,39,41] 所以我试着: [k for k in range (1,42) if k%2 != 0] def测试(N): k=[] 对于范围(1,N+1)内的i: 如果(i%2!=0): k、 附加(i) 对于k中的b[::2]:b是对存储在k
[1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,35,37,39,41]
现在,我想做到:
[-1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,35,37,39,41]
所以我试着:
[k for k in range (1,42) if k%2 != 0]
def测试(N):
k=[]
对于范围(1,N+1)内的i:
如果(i%2!=0):
k、 附加(i)
对于k中的b[::2]:
b
是对存储在k中的(不可变)整数的引用。通过将b更新为equal-b,您并没有修改列表,您只是简单地将b引用的东西从int-2对象更改为int-2对象。在构建列表时,您最好只进行否定:
[k if k%4==3 else -k for k in range (1,42) if k%2 != 0]
这项工作:
def test(N):
k = []
for i in range (1,N+1, 2): # i increases in steps of 2
if i % 4 == 1:
i = -i
k.append(i)
return k
test(43)
输出:
numbers = (k for k in range(1, 42) if k%2 != 0)
[x * [-1, 1][n % 2] for n, x in enumerate(numbers)]
演出
使用模的方法比Malik Brahimi在评论中建议的交替级数的方法快一点:
[-1, 3, -5, 7, -9, 11, -13, 15, -17, 19, -21, 23, -25, 27, -29, 31, -33, 35, -37, 39, -41]
如果你学过微积分,也许用
k%4
做点什么看起来像是一个交替序列。试着乘以(-1)**(k+1)
如果你学过微积分,看起来就像一个交替序列。尝试乘以(-1)**(k+1)
@MalikBrahimi谢谢你的提示。为不同的方法添加了一些性能度量。@MikeMüller这是一个非常复杂的列表!但是谢谢你!
[-1, 3, -5, 7, -9, 11, -13, 15, -17, 19, -21, 23, -25, 27, -29, 31, -33, 35, -37, 39, -41]
%%timeit
numbers = (k for k in range(1, 420000) if k%2 != 0)
[x * (-1)**(n + 1) for n, x in enumerate(numbers)]
1 loops, best of 3: 263 ms per loop
%%timeit
numbers = (k for k in range(1, 420000) if k%2 != 0)
[x * [-1, 1][n % 2] for n, x in enumerate(numbers)]
1 loops, best of 3: 210 ms per loop