在Python中基于一个列表在另一个列表中插入元素

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

我有两个列表sigma, Cb_max1。我想把0.021插入到sigma中,对应于Cb_max1中的每个非零元素。我给出了当前输出和预期输出。

sigma = [[0, 0, 0, 0, 0, 0.005, 0]]
Cb_max1 = [[0.0009847628716281426, 0.0009847628716281426, 0, 0, 0, 0.0009800221856714917, 0]]
sigma = [i if j != 0 else 0.021 for i, j in zip(Cb_max1, sigma[0])]
print(sigma)

当前输出为

[0.021]

预期输出为

[[0.021, 0.021, 0, 0, 0, 0.005, 0]]
yebdmbv4

yebdmbv41#

试试这个:

sigma = [[(0.021 if i != 0 else 0) if j == 0 else j 
          for (i, j) in zip(Cb_max1[0], sigma[0])]]

print(sigma)
[[0.021, 0.021, 0, 0, 0, 0.005, 0]]
6tqwzwtp

6tqwzwtp2#

你正在迭代一个长度为1的列表,因为zip会在较短的迭代器停止时立即停止,你可能需要迭代内部列表:

sigma = [i if j != 0 else 0.021 for i, j in zip(Cb_max1[0], sigma[0])]

如果你想让sigma成为一个嵌套列表,你需要添加一对额外的括号:

sigma = [[i if j != 0 else 0.021 for i, j in zip(Cb_max1[0], sigma[0])]]

此外,您正在检查sigma的值,并且您说要检查Cb_max的值:

sigma = [[j if i != 0 else 0.021 for i, j in zip(Cb_max1[0], sigma[0])]]

你用相反的方式写出了条件:

sigma = [[j if i == 0 else 0.021 for i, j in zip(Cb_max1[0], sigma[0])]]

这符合您提供的描述。您提供的输出似乎与此不符。可能您需要满足其他条件:你想保留sigma[0]中的非零值:

sigma = [[(j if i == 0 else 0.021)
          if j == 0 else j
          for i, j in zip(Cb_max1[0], sigma[0])]]

最后,这将给予你预期的输出。
如果你喜欢用更简单的方式来写:

sigma = [[0.021 if j == 0 and i != 0 else j
          for i, j in zip(Cb_max1[0], sigma[0])]]

相关问题