Python 遍历列表或列表列表并替换列表中的特定元素
我希望找到列表中最大的元素,然后将其余元素归零。我不是在寻找元素的索引,只是示例所示: 因此,我将从: 例如:Python 遍历列表或列表列表并替换列表中的特定元素,python,list,Python,List,我希望找到列表中最大的元素,然后将其余元素归零。我不是在寻找元素的索引,只是示例所示: 因此,我将从: 例如: a = [1,2,20,5,99,70,35] 到 但是,如果我有一个列表,我想从以下位置开始: c = [ [33,6,3],[10,50,20],[4,9,77] ] 到 回答:[[1,0,0],[0,1,0],[0,0,1]]如果列表中有多个最大元素,则可能会出现问题。但我的解决方案是: >>> a = [1, 2, 3] >>> b =
a = [1,2,20,5,99,70,35]
到
但是,如果我有一个列表,我想从以下位置开始:
c = [ [33,6,3],[10,50,20],[4,9,77] ]
到
回答:
[[1,0,0],[0,1,0],[0,0,1]]
如果列表中有多个最大元素,则可能会出现问题。但我的解决方案是:
>>> a = [1, 2, 3]
>>> b = [0] * len(a)
>>> b[a.index(max(a))] = 1
>>> b
[0, 0, 1]
请注意,如果有多个最大元素,则“1”将替换第一个元素。例如:
a = [3, 1, 2, 3]
b = [1, 0, 0, 0]
max(a)将返回列表中的最大元素
因此,您需要将所有非最大值替换为0,将所有最大值替换为1
你可以用几种方法来做这件事,但以上几点似乎最切题
基本上,这是循环遍历每个元素的简写,写出来的不同方法是,替换a中的元素:
b=max(a)
for n, i in enumerate(a):
if i == b:
a[n]=1
else:
a[n]=0
例如2,只需对c中的每个列表执行相同的操作:
[([1 if x ==max(i) else 0 for x in i] for i in c]
是否要查找最大元素的索引?为什么[0,0,1]可能重复?1不是列表中的larget元素。“它不应该是[0,0,3]?@Kevin是的,但他指的是最大元素的索引。第三个元素是最大的,它位于索引2。为什么不试着写一些代码呢?我想这是O(n^2)@vaultah是的,它是。。。。因为它会一次又一次地计算max(a)。因此,为了避免它,只需将其置于循环之外。谢谢你的回答。我很抱歉说得不清楚。@Chuck我想你最初的问题已经很清楚了。我认为你为此受到了很多抨击,这并不是完全有理由的。你应该尝试一个解决方案,并张贴你的尝试,即使这是一个非常糟糕的尝试。以上答案解决了你的第一个例子,如果你同意,请选择它。你可以问另一个问题,例如2,试着使我的解决方案适应它,这样应该更好received@EoinS,谢谢你的耐心和帮助。我感谢你的好意和帮助。无论你身在何处,愿上帝对你微笑。
b = max(a)
[1 if x==b else 0 for x in a]
b=max(a)
for n, i in enumerate(a):
if i == b:
a[n]=1
else:
a[n]=0
[([1 if x ==max(i) else 0 for x in i] for i in c]