Python 如何计算和替换列表列表中的值

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]]

对于每个元素,我希望找到倒数并忽略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:
                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]]