从多个嵌套的列表中更新一个项目
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从多个嵌套的列表中更新一个项目相关的知识,希望对你有一定的参考价值。
我有一个由多个列表组成的列表,我需要能够更新所有列表中出现的最大值,使其变为0。例如,对于这个列表,我想更新最大值,即6为0。那么,我怎样才能同时更新这两个位置呢?
g.graph = [[0, 2, 0, 6, 0],
[2, 0, 3, 0, 5],
[0, 3, 0, 0, 0],
[6, 0, 0, 0, 0],
[0, 5, 0, 0, 0]]
答案
这可以满足你的要求,但这取决于你所说的 "删除 "是什么意思。
graph = [[0, 2, 0, 6, 0],
[2, 0, 3, 0, 5],
[0, 3, 0, 0, 0],
[6, 0, 0, 0, 0],
[0, 5, 0, 0, 0]]
def del_max(g):
m = max(max(row) for row in g)
return [[x if x != m else None for x in xs] for xs in g]
print(del_max(graph))
你不可能事先知道最大值是什么 所以函数会找到所有行的最大值 然后返回输入数组,其中只有不属于最大值的值。
另一答案
首先你得从这些列表中知道最大值是多少,然后你就可以删除所有出现的值。
这段代码可以解决你的问题。
graph = [[0, 2, 0, 6, 0],
[2, 0, 3, 0, 5],
[0, 3, 0, 0, 0],
[6, 0, 0, 0, 0],
[0, 5, 0, 0, 0]]
max_val = 0
for lst in graph:
for item in lst:
if item > max_val:
max_val = item
for lst in graph:
for item in lst:
if item == max_val:
lst.remove(item)
print(str(graph))
另一答案
你可以这样做
def update(list_, value):
try:
index = list_.index(value)
list_.[index] = 0
except ValueError:
pass
value_to_update = max([i for l in g.graph for i in l]) # Flattening the g.graph list to find the maximum value
list(map(lambda x: update(x, value_to_update), g.graph)) # Calling list() because it needs to run over the map, which is lazy
这段代码实际上更新了原来的值 g.graph
列表,而不是创建一个新的列表。
另一答案
另一种方法,如果你有兴趣使用 itertools.chain
扁平化列表并获得最大值
from itertools import chain
[[0 if j == max(chain(*graph)) else j for j in i] for i in graph]
输出。
[[0, 2, 0, 0, 0],
[2, 0, 3, 0, 5],
[0, 3, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 5, 0, 0, 0]]
另一答案
Use remove method.
list.remove(x)
其中list是你的列表名称,x是需要删除的内容。
以上是关于从多个嵌套的列表中更新一个项目的主要内容,如果未能解决你的问题,请参考以下文章
无法从 ViewPager 中的另一个片段刷新/更新片段中的列表视图