簡體   English   中英

從python列表中提取n-tupel

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM