Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 列表理解和遍历列表_Python_Python 3.x_List Comprehension - Fatal编程技术网

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