Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 遍历列表或列表列表并替换列表中的特定元素_Python_List - Fatal编程技术网

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]