迭代列表或列表列表并替换列表列表中的特定元素

时间:2016-07-19 16:01:38

标签: python list

我想找到列表中最大的元素,并将其余元素清零。我不是在寻找元素的索引,正如示例所示:

所以我会从:

示例:

a = [1,2,20,5,99,70,35]

b = [0,0,0,0,1,0,0]

但是,如果我有一个列表列表,我想从以下地址开始:

c = [ [33,6,3],[10,50,20],[4,9,77] ]

d = [ [1,0,0],[0,1,0],[0,0,1] ]



new_a = [] #create a new empty list
a = [ [33,6,3],[10,50,20],[4,9,77] ] # the list I will loop through
for list in a: # this will go through the lists inside the list "a"
    biggest = max(list) # this will find the max elements in lists
    new_a.append([1 if i==biggest else 0 for i in list]) #append 
print(new_a)

答案:[ [1,0,0],[0,1,0],[0,0,1] ]

2 个答案:

答案 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]

答案 1 :(得分:1)

b = max(a)
[1 if x==b else 0 for x in a]

max(a)将返回列表中的最大元素

所以你想基本上用0和所有最大值替换所有非最大值为1。

你可以通过以下几种方式做到这一点,但上述内容似乎最为重要。

基本上这是循环遍历每个元素的简写,一种不同的方式来写出来,替换a中的元素将是:

b=max(a)
for n, i in enumerate(a):
  if i == b:
    a[n]=1
  else:
    a[n]=0

对于Example2,只需对c:

中的每个列表执行相同的操作
[([1 if x ==max(i) else 0 for x in i] for i in c]