比方说,我有这样的阵列的列表:删除除了具有最高值的项目的所有项目从阵列
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],...]
比方说,我有这样的阵列的列表:删除除了具有最高值的项目的所有项目从阵列
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]]
def implode_max(my_key, my_list):
yield max(filter(lambda x: x[1] == my_key, my_list), key=lambda x: x[2])
yield next(filter(lambda x: x[1] != my_key, my_list))
# yield next(iter(filter(lambda x: x[1] != my_key, my_list))) # python 2
# or
# for el in filter(lambda x: x[1] != my_key, my_list):
# yield el
# this function is a generator, so to print it we need to materialize it
# but for your needs maybe iterator is better
print(list(implode_max(124, l)))
这应该有关python 2和3工作,但是在3个它会更快,作为过滤器返回迭代器,所以较少的存储器被使用。
首先,我们过滤得到的只是那些我们想内爆的元素,而不是我们发现的一个元素,我们想要保留,然后 - 对它进行处理。
第二我们过滤所有其他元素,我们一个接一个地排列它们。
然而
如果你的问题是要破灭全部由第一指数分组的元素,我的解决方案不会那么好看:
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()
在这里,我们使用的是临时字典有随机访问由第一个索引索引的元素,在字典中我们只保留第二个索引最高的元素。
这正是我的意思:)“下一个收益”部分是做什么的? – user3759978
@ user3759978第一个yield是正常工作的“返回这个元素”,第二个是从发生器中逐个采用元素(使用'next'),如果不存在'next',它将返回一个完整的过滤数组python 2或python 3中的“filter object”([some docs](https://wiki.python.org/moin/Generators))(如果这是你想要的东西,请将它标记为答案:)) – Jerzyk
这是一些真棒的东西。谢谢! – user3759978
不是最Python的方式,但它仍然是卓有成效的:
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
为什么在结果中有[[(1,2),101,10001]? 101不是最高也不是10001. –
因为我想用124保持最高的阵列,其余的应该不受影响。 – user3759978
你的python无效。这是一个列表清单吗?顺便说一句。不鼓励使用'l'作为变量名。无论如何,你能不能通过每个嵌套列表中的第三个元素对列表进行排序,并选择第一个或最后一个?例如。 (1,2),124,10003],[(1,2),124,10002]的排序(l,key = lambda x:x [2],reverse = True) (1,2),124,10001],[(1,2),101,10001]]' – jDo