我有一个带有浮点数的列表列表。
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将被删除。
答案 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]]