[英]Extract n-tupels from a list of tupels in python
经过一些计算后,我得到了一个元组列表,其中包含[(str, str, float), (...), ...]
格式:
output: [('inputData_4', 'targetData_1', 0.09739792547374054),
('inputData_4', 'targetData_1', 0.09739792718209167),
('inputData_4', 'targetData_1', 0.09739793368940086),
('inputData_2', 'targetData_1', 0.10266894735114324),
('inputData_2', 'targetData_1', 0.1026689508485586),
('inputData_2', 'targetData_1', 0.10873575415245394),
('inputData_3', 'targetData_1', 0.1464233452565107),
('inputData_3', 'targetData_1', 0.14642335418508975),
('inputData_3', 'targetData_1', 0.14642336077619336),
('inputData_1', 'targetData_1', 0.1561837827131314),
('inputData_1', 'targetData_1', 0.15618378709179737),
('inputData_1', 'targetData_1', 0.15618379092496212)]
该列表使用float作为键值sorted(meanScores, key=lambda tup: tup[2])
并且如您所见,每个元组都重复了三遍。
如何从整个列表中仅提取最小浮点值的三个Tupel(如果列表中至少包含三个Tupel),而无需重复呢?
谢谢!
编辑
重复授课的顺序也可以不同地列出,例如:
output: [('inputData_4', 'targetData_1', 0.09739792547374054),
('inputData_2', 'targetData_1', 0.1026689508485586),
('inputData_4', 'targetData_1', 0.09739793368940086),
('inputData_2', 'targetData_1', 0.10266894735114324),
('inputData_2', 'targetData_1', 0.10873575415245394),
('inputData_4', 'targetData_1', 0.09739792718209167),
...]
请注意,一定要了解您想要的内容,但这是我的理解:您有一个由两个字符串和一个浮点值组成的元组列表。 您希望将字符串相等的连续元组分组,并找到浮点值最小的元组。
如果您的元组已排序,则可以使用itertools.groupby
进行分组,使用min
来查找最小值:
output= [('inputData_4', 'targetData_1', 0.09739792547374054),
('inputData_4', 'targetData_1', 0.09739792718209167),
('inputData_4', 'targetData_1', 0.09739793368940086),
('inputData_2', 'targetData_1', 0.10266894735114324),
('inputData_2', 'targetData_1', 0.1026689508485586),
('inputData_2', 'targetData_1', 0.10873575415245394),
('inputData_3', 'targetData_1', 0.1464233452565107),
('inputData_3', 'targetData_1', 0.14642335418508975),
('inputData_3', 'targetData_1', 0.14642336077619336),
('inputData_1', 'targetData_1', 0.1561837827131314),
('inputData_1', 'targetData_1', 0.15618378709179737),
('inputData_1', 'targetData_1', 0.15618379092496212)]
# sort is sorted, group by input/target
import itertools
for key, group in itertools.groupby(output, key=lambda t: t[:2]):
tmin = min(group, key=lambda t: t[2])
print(tmin)
你得到:
('inputData_4', 'targetData_1', 0.09739792547374054)
('inputData_2', 'targetData_1', 0.10266894735114324)
('inputData_3', 'targetData_1', 0.1464233452565107)
('inputData_1', 'targetData_1', 0.1561837827131314)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.