我想找到列表中最大的元素,并将其余元素清零。我不是在寻找元素的索引,正如示例所示:
所以我会从:
示例:
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] ]
答案 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]