所以我想对列表进行循环计算,但没有成功。我想要一个包含(1+log10(i))
的新列表:
l = [115, 10, 2, 0]
for i in l:
l_1 = []
if i == 0:
l_1.append(i)
else:
l_1.append(1+np.log10(i))
print(l_1)
[0]
你正在每个循环通道中创建一个新列表,简单地把它拿出来:
l = [115, 10, 2, 0]
l_1 = []
for i in l:
if i == 0:
l_1.append(i)
else:
l_1.append(1+np.log10(i))
这样做的pythonic方法是理解:
l_1 = [1+np.log10(i) if i != 0 else 0 for i in l]
这里的问题是for i in l
给你的是 i 而不是索引中的值,所以你只添加一个值,最后一个值。
这是一个列表理解,可以做你想做的事:
import numpy as np
l = [115, 10, 2, 0]
l_1 = [1+np.log10(i) if i !=0 else i for i in l]
print(l_1)
或者你可以充分利用numpy:
import numpy as np
l = np.array((115, 10, 2, 0))
r = 1 + np.log10(np.where(l != 0, l, 0.1))
# [ 3.06069784 2. 1.30103 0. ]
使用numpy.where
来清除0
(并用0.1
代替它,这样np.log10(x) = 1
将导致+1
后0
(。