如果满足条件,则列表理解以更新值

我有以下列表和变量 i:

probs = [1/9, 1/9, 1/9, 1/9, 1/9, 1/9, 1/9, 1/9, 1/9]
i = 3

我想将变量 i 中给出的索引的列表中的值更改为 3/9,并将其余值更改为 8/9。因此,上述条件的预期结果将是:

probs = [8/9, 8/9, 8/9, 3/9, 8/9, 8/9, 8/9, 8/9, 8/9]

我更喜欢用列表理解来提高效率,有什么想法吗?

回答

您可以使用列表推导式中的表达式来执行此操作。

probs = [3 / 9 if i == index else 8 / 9 for index, _ in enumerate(probs)]


回答

这是一个列表理解,可以满足您的要求:

probs = ["1/9", "1/9", "1/9", "1/9", "1/9", "1/9", "1/9", "1/9", "1/9"]
i = 3

probs = ["3/9" if idx == i else "8/9" for idx in range(len(probs))]
print(probs)
# Prints ['8/9', '8/9', '8/9', '3/9', '8/9', '8/9', '8/9', '8/9', '8/9']

请注意,我将分数转换为字符串,否则它们将被打印为浮点数。如果你想让它们成为浮点数,你可以这样做:

probs = [1/9, 1/9, 1/9, 1/9, 1/9, 1/9, 1/9, 1/9, 1/9]
i = 3

probs = [3/9 if idx == i else 8/9 for idx in range(len(probs))]
print(probs)
# Prints [0.8888888888888888, 0.8888888888888888, 0.8888888888888888, 0.3333333333333333, 0.8888888888888888, 0.8888888888888888, 0.8888888888888888, 0.8888888888888888, 0.8888888888888888]

另外,请注意,这个列表理解实际上并不比普通的 for 循环快。


以上是如果满足条件,则列表理解以更新值的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>