我有一组像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的最大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)
答案 0 :(得分: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 "---------"
答案 1 :(得分: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])]
如果您的列表可能不合适,那么我认为您需要将内容放在另一个数据结构中。以下是使用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
答案 2 :(得分: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]]