Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-列表中的值减法_Python_List_Nested Lists - Fatal编程技术网

Python-列表中的值减法

Python-列表中的值减法,python,list,nested-lists,Python,List,Nested Lists,我是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

我是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]
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
而(i尝试以下方法:

x3 = [((x - 1) if x != 10.5 else x) for x in x2]

Python的内置函数映射非常适合您手头的情况,使用它,解决问题的匿名函数就变成了一行:

map(lambda x: x if x == 10.5 else x - 1, x2)
或者,如果您不习惯使用lambda函数,可以单独定义函数:

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

map (func, x2)

Python非常优雅。

映射是最好的选择,但如果您想与众不同,请使用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]

+1用于显示示例输入、所需输出和您尝试过的代码。您尝试向列表中添加元素的方式适用于字典;对于列表,您不能仅分配它。可以使用
list.append
方法,也可以使用答案建议的一个奇特选项,包括
map
和列表理解。
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)
>>> 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]