0

x、yの形式で次のようなデータのセットがあります。

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

([2,1,2.35])、([2、-3,2.96])をまとめるためにyで凝縮する方法はありますか?2つの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

2つの解決策があると思います。

等しい値のすべてのグループが互いに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])]

リストが適切でない場合は、別のデータ構造に配置する必要があると思います。defaultdictとを使用した解決策は次の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 に答える
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 に答える