0

我有一组这样的数据,格式为 x,y:

a = [([2,-2,0.29]), 0)([-2,0,1.9]), 2),([ 2,1,2.35]),3),([2, -3,2.96]), 3)

有没有办法通过 y 压缩,以便我将 ([ 2,1,2.35]),([2, -3,2.96]) 放在一起?我想把它们放在一起,这样我就可以找到两个 x 中每一个的最大 x 和 y。如您所见,我的 x 项实际上本身就是一个 x,y,z。

编辑 这是我尝试过的代码。我需要一种方法来实现我不必在“3”中编码的地方。

import numpy as np
a = [([2, -2, 0.29], 0), ([-2, 0, 1.9], 2), ([2, 1, 2.35], 3), ([2, -3, 2.96], 3)]
b = [0,2,3,3,5,5,6,6,6,8,8,9,10,11,11,11,16,16,16,16,17,18,19,20,20,20,23,24,25,26,28]
cur = []
for x,y in a:
if y == 3:
    cur.append(x)
    b.remove(3)
4

3 回答 3

1

您可以这样做将它们放入默认字典中。

from collections import defaultdict
new_data = defaultdict()
for data_point in a:
 if data_point[1] in new_data:
   new_data[data_point[1]].append(data_point[0])
 else:
   new_data[data_point[1]] = [data_point[0]]

然后得到你可以做的每个部分的最大值

for item in new_data.items():
     print "For key: ",
     print item[0]
     print max([data[0] for data in item[1]])
     print max([data[1] for data in item[1]])
     print max([data[2] for data in item[1]])
     print "---------"
于 2013-03-26T00:32:10.767 回答
0
In [1]: a = [([2, -2, 0.29], 0), ([-2, 0, 1.9], 2), ([2, 1, 2.35], 3), ([2, -3, 2.96], 3)]

In [2]: result={}

In [3]: for x in a:
   ...:     result.setdefault(x[1],[]).append(x[0])
   ...:     

In [4]: result[3]
Out[4]: [[2, 1, 2.35], [2, -3, 2.96]]
于 2013-03-26T02:00:03.337 回答
0

我认为有两种解决方案。

如果您知道所有相等y值的组彼此相邻(例如,因为您的列表已排序),您可以使用itertools.groupby组合相邻值:

from itertools import groupby

def condense_on_y(lst):
    return [group[0][1], [x for x,y in group]
            for group in groupby(lst, lambda item: item[1])]

如果您的列表可能不按顺序排列,那么我认为您需要将内容放入另一个数据结构中。这是使用defaultdictand的解决方案itertools.chain.from_iterable

from collections import defaultdict

def condense(lst):
    dct = defaultdict(list)
    for x, y in lst:
        values[y].append(x)

    return list(dct.items()) # list(...) wrapper not needed in Python 2
于 2013-03-26T00:50:13.290 回答