6

我是 Python 新手,我在使用列表时遇到了困难。我希望从列表中的所有值中减去 1,但值 10.5 除外。下面的代码给出了 x3 列表分配索引超出范围的错误。到目前为止的代码:

x2=[10.5, -6.36, 11.56, 19.06, -4.37, 26.56, 9.38, -33.12, -8.44, 0.31, -13.44, - 6.25, -13.44, -0.94, -0.94, 19.06, 0.31, -5.94, -13.75, -23.44, -51.68, 10.5]
x3=[]
i=0
while (i<22):
 if x2[i]==10.5:
    x3[i]=x2[i]
else:
    x3[i]=x2[i]-1
break
#The result I want to achieve is:
#x3=[10.5, -7.36, 10.56, 18.06, -5.37, 25.56, 8.38, -34.12, -9.44, -1.31, -14.44, -7.25, -14.44, -1.94, -1.94, 18.06, -1.31, -6.94, -14.75, -24.44, -52.68, 10.5]
4

5 回答 5

7

Try the following:

x3 = [((x - 1) if x != 10.5 else x) for x in x2]
于 2012-04-06T11:37:14.540 回答
3
x2 = [10.5, -6.36, 11.56, 19.06, -4.37, 26.56, 9.38, -33.12, -8.44, 0.31, -13.44, - 6.25, -13.44, -0.94, -0.94, 19.06, 0.31, -5.94, -13.75, -23.44, -51.68, 10.5]
x3 = map(lambda x: x if x == 10.5 else x - 1, x2)

Python being elegant.

于 2012-04-06T11:38:46.120 回答
0

Python's built-in function map is pretty much exactly for the situation you have in hand, using that and an anonymous function solving the problem becomes a one-liner:

map(lambda x: x if x == 10.5 else x - 1, x2)

Or if you are not comfortable in using lambda functions, you can define the function separately:

def func(x):
    if x == 10.5:
        return x
    else:
        return x - 1

map (func, x2)
于 2012-04-06T11:38:32.340 回答
0
x2=[10.5, -6.36, 11.56, 19.06, -4.37, 26.56, 9.38, -33.12, -8.44, 0.31, -13.44, - 6.25, -13.44, -0.94, -0.94, 19.06, 0.31, -5.94, -13.75, -23.44, -51.68, 10.5]
x3=[]
for value in x2:
    if value != 10.5:
        value -= 1
    x3.append(value)
于 2012-04-06T11:36:18.917 回答
0

Map 是最好的选择,但如果你想与众不同,请使用 reduce :D

>>> x2 = [10.5, -6.36, 11.56, 19.06, -4.37, 26.56, 9.38, -33.12, -8.44, 0.31, -13.44, - 6.25, -13.44, -0.94, -0.94, 19.06, 0.31, -5.94, -13.75, -23.44, -51.68, 10.5]
>>> reduce(lambda x,y: x+[y if y==10.5 else y-1], x2, [])  
[10.5, -7.36, 10.56, 18.06, -5.37, 25.56, 8.38, -34.12, -9.44, -0.69, -14.44, -7.25, -14.44, -1.94, -1.94, 18.06, -0.69, -6.94, -14.75, -24.44, -52.68, 10.5]
于 2012-04-06T11:45:21.527 回答