list comprehension中的index(max(my_list))给出了max值的所有实例,而不是第一次出现的实例

时间:2017-12-08 15:00:18

标签: python python-3.x

请考虑以下代码段 - >

li = [3,1,2,3]
print([x+99 if li.index(x)!=li.index(max(li)) else x-(99*(len(li)-1)) for x in li ])

我期待输出为:

[-294, 100, 101, 102]

但运行该程序的实际输出是:

[-294, 100, 101, -294]

为什么我在列表中得到最大值的两个实例而不是第一次出现?

如何评估列表推导以及如何负责我的程序中的输出?

1 个答案:

答案 0 :(得分:2)

您的列表中有多个3index的实现是这样的,它只找到传递给它的值第一次出现的索引。相反,请使用enumerate

li = [3,1,2,3]
l1 = [x+99 if i!=li.index(max(li)) else x-(99*(len(li)-1)) for i, x in enumerate(li)]

输出:

[-294, 100, 101, 102]