Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.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_Arrays - Fatal编程技术网

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)并将其内爆-删除第一个索引值等于所选值的所有项目,只保留第二个索引值最高的项目
代码:

这应该适用于Python2和Python3,但是在Python3上会更快,因为过滤器返回迭代器,所以使用的内存更少

首先,我们过滤只得到那些我们想要内爆的元素,然后我们找到一个我们想要保留的元素,然后-yied它

其次,我们过滤所有其他元素,然后一个接一个地将它们显示出来

但是

如果您的问题是将所有按第一个索引分组的元素内爆,那么我的解决方案就不那么好了:

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)并将其内爆-删除第一个索引值等于所选值的所有项目,只保留第二个索引值最高的项目
代码:

这应该适用于Python2和Python3,但是在Python3上会更快,因为过滤器返回迭代器,所以使用的内存更少

首先,我们过滤只得到那些我们想要内爆的元素,然后我们找到一个我们想要保留的元素,然后-yied它

其次,我们过滤所有其他元素,然后一个接一个地将它们显示出来

但是

如果您的问题是将所有按第一个索引分组的元素内爆,那么我的解决方案就不那么好了:

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你能帮我吗