请考虑以下代码段 - >
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]
为什么我在列表中得到最大值的两个实例而不是第一次出现?
如何评估列表推导以及如何负责我的程序中的输出?
答案 0 :(得分:2)
您的列表中有多个3
。 index
的实现是这样的,它只找到传递给它的值第一次出现的索引。相反,请使用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]