Python 从数组列表中删除除值最高的项以外的所有项
假设我有一个数组列表,如下所示:Python 从数组列表中删除除值最高的项以外的所有项,python,arrays,Python,Arrays,假设我有一个数组列表,如下所示: list= [[(1,2),124,10001],[(1,2),124,10002],[(1,2),124,10003][(1,2),101,10001],...] 在本例中,如何提取值为124的所有数组,并按最后一个值对这些数组进行排序,并仅保留最高值(此处:10003)。所以我只剩下: list=[[(1,2),124,10003],[(1,2),101,10001],...] 虽然不是最具蟒蛇风格的方式,但它仍然发挥了作用: l = [[(1,2),1
list= [[(1,2),124,10001],[(1,2),124,10002],[(1,2),124,10003][(1,2),101,10001],...]
在本例中,如何提取值为124的所有数组,并按最后一个值对这些数组进行排序,并仅保留最高值(此处:10003)。所以我只剩下:
list=[[(1,2),124,10003],[(1,2),101,10001],...]
虽然不是最具蟒蛇风格的方式,但它仍然发挥了作用:
l = [[(1,2),124,10001],[(1,2),124,10002],[(1,2),124,10003],[(1,2),101,10001]]
l.sort(key=lambda x: x[2], reverse=True)
l.sort(key=lambda x: x[1])
pr = None
lmax = []
for i in l:
if i[1] != pr:
lmax.append(i)
pr = i[1]
print lmax
虽然不是最具蟒蛇风格的方式,但它仍然发挥了作用:
l = [[(1,2),124,10001],[(1,2),124,10002],[(1,2),124,10003],[(1,2),101,10001]]
l.sort(key=lambda x: x[2], reverse=True)
l.sort(key=lambda x: x[1])
pr = None
lmax = []
for i in l:
if i[1] != pr:
lmax.append(i)
pr = i[1]
print lmax
我的尝试,带着一个大大的免责声明:这是我对你的问题的理解:
- 有一个包含3个元素的列表:元组、第一个索引、第二个索引
- 您希望选择一个第一个索引值(例如124)并将其内爆-删除第一个索引值等于所选值的所有项目,只保留第二个索引值最高的项目
l = [[(1,2),124,10001], [(1,2),124,10002], [(1,2),124,10003], [(1,2),101,10001], [(1,2),101,9999]]
tmp_dict = {}
for e in l:
if e[1] not in tmp_dict or tmp_dict[e[1]][2] < e[2]:
tmp_dict[e[1]] = e
result = tmp_dict.values()
l=[[(1,2),12410001],(1,2),12410002],(1,2),12410003],(1,2),10110001],(1,2),1019999]]
tmp_dict={}
对于l中的e:
如果e[1]不在tmp_dict或tmp_dict[e[1][2]
在这里,我们使用一个临时字典来随机访问按第一个索引索引的元素,在字典中,我们只保留第二个索引最高的元素。我的尝试,带有一个大大的免责声明:这是我对您问题的理解:
- 有一个包含3个元素的列表:元组、第一个索引、第二个索引
- 您希望选择一个第一个索引值(例如124)并将其内爆-删除第一个索引值等于所选值的所有项目,只保留第二个索引值最高的项目
l = [[(1,2),124,10001], [(1,2),124,10002], [(1,2),124,10003], [(1,2),101,10001], [(1,2),101,9999]]
tmp_dict = {}
for e in l:
if e[1] not in tmp_dict or tmp_dict[e[1]][2] < e[2]:
tmp_dict[e[1]] = e
result = tmp_dict.values()
l=[[(1,2),12410001],(1,2),12410002],(1,2),12410003],(1,2),10110001],(1,2),1019999]]
tmp_dict={}
对于l中的e:
如果e[1]不在tmp_dict或tmp_dict[e[1][2]
这里我们使用一个临时字典来随机访问按第一个索引索引的元素,在字典中我们只保留第二个索引最高的元素。为什么结果中有
[(1,2),10110001]
?101不是最高的,也不是10001。因为我想用124保留数组中的最高值。其余部分应不受影响。您的python无效。这是一张名单吗?顺便说一句,不鼓励使用l
作为变量名。不管怎样,您不能按照每个嵌套列表中的第三个元素对列表进行排序,然后选择第一个或最后一个元素吗?例如,排序(l,key=lambda x:x[2],reverse=True)
将产生[[(1,2),12410003],(1,2),12410002],(1,2),12410001],(1,2),10110001]。
我刚才用了一个简单的示例代码来解决我的问题。但是谢谢你指出我的例子可能不清楚。它应该是一个数组列表(我仍然是编程方面的高手)。我想去掉124的所有重复项,除了该项中最后一个项的值最高的数组。有一件事需要确定——你说“最后一个值最高”,但它们可能不同。你要最高的还是最后一个?第二,您是否可以控制这些数据结构?您可以使用字典而不是列表列表,并且仅当值大于当前值时才覆盖该值。为什么结果中有[(1,2),10110001]
?101不是最高的,也不是10001。因为我想用124保留数组中的最高值。其余部分应不受影响。您的python无效。这是一张名单吗?顺便说一句,不鼓励使用l
作为变量名。不管怎样,您不能按照每个嵌套列表中的第三个元素对列表进行排序,然后选择第一个或最后一个元素吗?例如,排序(l,key=lambda x:x[2],reverse=True)
将产生[[(1,2),12410003],(1,2),12410002],(1,2),12410001],(1,2),10110001]。
我刚才用了一个简单的示例代码来解决我的问题。但是谢谢你指出我的例子可能不清楚。它应该是一个数组列表(我仍然是编程方面的高手)。我想去掉124的所有重复项,除了该项中最后一个项的值最高的数组。有一件事需要确定——你说“最后一个值最高”,但它们可能不同。你要最高的还是最后一个?第二,您是否可以控制这些数据结构?与列表列表不同,您可以使用字典,仅当值大于当前值时才覆盖该值。无论是否为pythonic,有时您需要从某个地方开始<代码>(不是i[1]==pr)(i[1]!=pr)@Jerzyk你能解释一下区别吗?“not”的优先级低于==因此not a==b
等于!(a==b)
等于a!=b
。显然我遗漏了什么?你在做两个操作,首先比较,然后求反,当你可以用一个操作替换时-比较不相等-这不仅使你的代码更快,而且更容易阅读pythonic或不,有时你需要从某个地方开始<代码>(不是我[1]==pr)(我[1]!=pr)@Jerzyk你能帮我吗