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

时间:2019-04-24 12:42:27

标签: python python-3.x

我有一个带有浮点数的列表列表。

lst = [[1.0,2.0,3.0],[0.0,1.0,2.0],[1.0,2.0,3.0]]

对于每个元素,我想找到倒数,并忽略是否== 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=[[1/1.0, 1/2.0, 1/3.0] , [1/1.0, 1/2.0] , etc...]]

请注意,计算之后,我最初在lst [1]中拥有的0.0将被删除。

5 个答案:

答案 0 :(得分:5)

使用列表推导并覆盖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]]

答案 1 :(得分:1)

如果您想更改嵌套列表中的值,而不是用新列表替换,则可以执行以下操作:

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

答案 2 :(得分:1)

lst = [[1.0,2.0,3.0] , [0.0,1.0,2.0] , [1.0,2.0,3.0]]

def reciprocate(list_input):
    new_list = []
    for x in list_input:
        if x!=0.0:
            new_list.append(1/x)
    return new_list

new_lst = [reciprocate(l) for l in lst]
print(new_lst)

这给出了以下输出。

[[1.0, 0.5, 0.3333333333333333], [1.0, 0.5], [1.0, 0.5, 0.3333333333333333]]

答案 3 :(得分: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:
    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)

答案 4 :(得分:0)

您可以使用列表功能来实现所需的功能:

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