for 循环不适用于 if else 条件



所以我想对列表进行循环计算,但没有成功。我想要一个包含(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将导致+10(。

最新更新