在Python中跟踪一个列表相对于另一个列表的元素

ymdaylpp  于 2023-03-11  发布在  Python
关注(0)|答案(2)|浏览(146)

我有列表J1Ci。对于J1中的每个零元素,我希望Ci中对应的元素为零。对于J1中的每个非零元素,Ci中对应的元素应该相同。但是我得到了一个错误。我给出了预期的输出。

J1 = [[0, 0, 0, 0, 0, 9, 0]]
Ci=[0.0,
 8.317333882002454e-05,
 0.0,
 8.305496451875518e-05,
 8.24723410599921e-05,
 8.257692992192182e-05,
 8.2641447034131e-05]

J1=[i for i in J1[0] if i!=0]
Ci=Ci[J1]
print(Ci)

错误是

in <module>
    Ci=Ci[J1]

TypeError: list indices must be integers or slices, not list

预期输出为

[0.0, 0.0, 0.0, 0.0, 0.0, 8.257692992192182e-05, 0.0]
hivapdat

hivapdat1#

你可以用zip()来理解它:

J1 = [[0, 0, 0, 0, 0, 9, 0]]
Ci=[0.0,
 8.317333882002454e-05,
 0.0,
 8.305496451875518e-05,
 8.24723410599921e-05,
 8.257692992192182e-05,
 8.2641447034131e-05]

Ci = [i if j != 0 else 0.0 for i, j in zip(Ci, J1[0])]

print(Ci)

输出:

[0.0, 0.0, 0.0, 0.0, 0.0, 8.257692992192182e-05, 0.0]

或者,使用numpy

import numpy as np

Ci = np.where(J1[0] != 0, Ci, 0.0)
lrpiutwd

lrpiutwd2#

您得到的错误是因为您试图将一个列表用作另一个列表的索引。这是不可能的,因为列表索引必须是整数或切片。
您可以改为循环以迭代J1的元素,并使用每个非零元素的索引来访问Ci中的相应元素。如果J1中的元素为零,则将Ci中的相应元素设置为零。

J1 = [[0, 0, 0, 0, 0, 9, 0]]
Ci = [0.0, 8.317333882002454e-05, 0.0, 8.305496451875518e-05, 8.24723410599921e-05, 8.257692992192182e-05, 8.2641447034131e-05]

for i, val in enumerate(J1[0]):
    if val == 0:
        Ci[i] = 0.0
    else:
        Ci[i] = Ci[val-1]

print(Ci)

相关问题