我有一个浮动数列表。
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]]
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]]
您需要在每个外部迭代中创建一个嵌套列表。
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)
您可以使用列表推导来实现所需:
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]]