我试图更好地了解列表理解的工作原理。我有以下函数,如果数字是素数,则返回true或false(我在论坛上的某个地方找到了,但不记得在哪里):
import math
def is_prime(n):
if n % 2 == 0 and n > 2:
return False
for i in range(3, int(math.sqrt(n)) + 1, 2):
if n % i == 0:
return False
return True
Run Code Online (Sandbox Code Playgroud)
如果我运行:
[x for x in range(2, num) if is_prime(x)]
Run Code Online (Sandbox Code Playgroud)
我得到理想的结果
[2, 3, 5, 7, 11, 13, 17, 19]
Run Code Online (Sandbox Code Playgroud)
在尝试将整个函数转换为列表理解时,我想到了:
[x if not (x%2==0 and x > 2) else x for x in range (2, num)
for i in range(3, int(x**(1/2))+1, 2) if not (x%i==0)]
Run Code Online (Sandbox Code Playgroud)
产生: …
我有以下numpy数组:
import numpy as np
arr = np.array([[1,2,3,4,2000],
[5,6,7,8,2000],
[9,0,1,2,2001],
[3,4,5,6,2001],
[7,8,9,0,2002],
[1,2,3,4,2002],
[5,6,7,8,2003],
[9,0,1,2,2003]
])
Run Code Online (Sandbox Code Playgroud)
我知道np.sum(arr, axis=0)可以提供以下结果:
array([ 40, 28, 36, 34, 16012])
Run Code Online (Sandbox Code Playgroud)
我想做的(没有for循环)是根据最后一列的值对各列求和,以便提供的结果是:
array([[ 6, 8, 10, 12, 4000],
[ 12, 4, 6, 8, 4002],
[ 8, 10, 12, 4, 4004],
[ 14, 6, 8, 10, 4006]])
Run Code Online (Sandbox Code Playgroud)
我意识到这可能是一个无循环的尝试,但希望能做到最好……
如果必须使用for循环,那将如何工作?
我试过了np.sum(arr[:, 4]==2000, axis=0)(我会2000用for循环中的变量代替),但是结果是2