Python 如何计算和替换列表列表中的值
我有一个带有浮点数的列表 lst=[[1.0,2.0,3.0],[0.0,1.0,2.0],[1.0,2.0,3.0]] 对于每个元素,我希望找到倒数并忽略if==0.0 请不要模块,最好使用列表和循环 这就是我所想到的:Python 如何计算和替换列表列表中的值,python,python-3.x,Python,Python 3.x,我有一个带有浮点数的列表 lst=[[1.0,2.0,3.0],[0.0,1.0,2.0],[1.0,2.0,3.0]] 对于每个元素,我希望找到倒数并忽略if==0.0 请不要模块,最好使用列表和循环 这就是我所想到的: lst = [[1.0,2.0,3.0] , [0.0,1.0,2.0] , [1.0,2.0,3.0]] new_values=[] for slist in lst: for x in slist: if x!=0.0:
lst = [[1.0,2.0,3.0] , [0.0,1.0,2.0] , [1.0,2.0,3.0]]
new_values=[]
for slist in lst:
for x in slist:
if x!=0.0:
reciprocal=1.0/x
new_values.append(reciprocal)
else:
reciprocal=0.0
new_values.append(reciprocal)
当然,这只是创建了一个新的列表,而我希望它保持在我编写的列表列表(lst)中
期望
lst=[[1/1.0, 1/2.0, 1/3.0] , [1/1.0, 1/2.0] , etc...]]
请注意,我最初在lst[1]中使用的0.0在计算后被删除。使用列表理解并覆盖
lst
变量:
lst = [[x if x == 0.0 else 1/x for x in l] for l in lst]
请注意,x==0.0
是不好的做法,但我想这不是这个问题的重点
输出:
[[1.0, 0.5, 0.3333333333333333], [0.0, 1.0, 0.5], [1.0, 0.5, 0.3333333333333333]]
如果要更改嵌套列表中的值,而不是将其替换为新列表,可以执行以下操作:
lst = [[1.0, 2.0, 3.0] , [0.0, 1.0, 2.0] , [1.0, 2.0, 3.0]]
for slist in lst:
for i, x in enumerate(slist):
slist[i] = 1.0 / x if x != 0.0 else 0.0
print(lst)
# [[1.0, 0.5, 0.3333333333333333], [0.0, 1.0, 0.5], [1.0, 0.5, 0.3333333333333333]]
您需要在每个外部迭代中创建一个嵌套列表
lst = [[1.0,2.0,3.0] , [0.0,1.0,2.0] , [1.0,2.0,3.0]]
new_values=[]
for slist in lst:
new_sublist = []
for x in slist:
if x!=0.0:
reciprocal=1.0/x
else:
reciprocal=0.0
new_sublist.append(reciprocal)
new_values.append(new_sublist)
您可以使用list comphrensions实现所需的:
lst = [[1.0,2.0,3.0] , [0.0,1.0,2.0] , [1.0,2.0,3.0]]
reciprocals = [list(map(lambda x: (1/x) if x != 0.0 else 0.0, sub_list)) for sub_list in lst]
输出:
[[1.0, 0.5, 0.3333333333333333], [0, 1.0, 0.5], [1.0, 0.5, 0.3333333333333333]]
这将提供以下输出
[[1.0, 0.5, 0.3333333333333333], [1.0, 0.5], [1.0, 0.5, 0.3333333333333333]]
如果
x==0.0
,我想OP想保留x
,所以我想你需要删除继续并用新列表替换它。附加(x)
。如果你读了他问题的最后几行,他特别提到,如果列表中的元素为x==0.0,他希望去掉它。他还删除了预期输出中的该元素。在这种情况下,您不需要执行if/else,只需执行if x!=0.0:新列表。附加(1/x)
@HS星云你说得对。根据你的建议调整我的代码。谢谢
[[1.0, 0.5, 0.3333333333333333], [1.0, 0.5], [1.0, 0.5, 0.3333333333333333]]