微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何根据最小值获取具有某个值的元组列表 - 仅适用于 Python 的本机库

如何解决如何根据最小值获取具有某个值的元组列表 - 仅适用于 Python 的本机库

我有以下代码...但我需要获取最小值对应的文件名:

import itertools

arrayFiles = []
for subset in itertools.combinations(distances,2):
  array = []
  for k in range(K):
    array.append(min([(n[1][k]) for n in subset]))
  arrayFiles.append(array)

例如,我有以下示例数据 K = 10,距离列表是:

distances = [('highway_bost174',[0.0,8.708170812,4.088197921,11.366319879999999,12.638763287,11.078233943,10.025102839,8.415467337,8.194840093,13.455056175000001]),('ibis_142',[8.708170812,0.0,10.518235207,7.668395996,10.522399903,7.302185059,6.417022705,6.146172005,10.448354985,5.149291993]),('street_par88',[4.088197921,11.135904053,11.472831274,10.691568116,9.663827636,10.659660884000001,9.392413013999999,12.586018896]),('opencountry_241',[11.366319879999999,13.314941407,2.754882813,3.998626709,9.028326501,12.145703089000001,8.675354002999999]),('waterfall23',[12.638763287,12.665527344000001,11.406341552,12.6048929,11.43774673,8.79888916]),('field26',[11.078233943,3.349212646,8.966176812,11.827669236000002,8.203674316]),('mountain_030',[10.025102839,8.78585096,11.994283939999999,7.7325744620000005]),('horse_081',[8.415467337,8.054160893999999,11.093641082000001]),('bison_052',[8.194840093,12.869559482]),('ibis_040',[13.455056175000001,5.149291993,12.586018896,8.675354002999999,8.79888916,8.203674316,7.7325744620000005,11.093641082000001,12.869559482,0.0])]
highway_bost174 ibis_142 street_par88 opencountry_241 waterfall23 field26 mountain_030 horse_081 bison_052 ibis_040
highway_bost174 0 8.708170812 4.088197921 11.366319880 12.63876329 11.07823394 10.02510284 8.415467337 8.194840093 13.45505618
ibis_142 8.708170812 0 10.518235207 7.668395996 10.5223999 7.302185059 6.417022705 6.146172005 10.44835499 5.149291993
street_par88 4.088197921 10.51823521 0. 11.135904053 11.47283127 10.69156812 9.663827636 10.65966088 9.392413014 12.5860189
opencountry_241 11.36631988 7.668395996 11.135904053 0. 13.31494141 2.754882813 3.998626709 9.028326501 12.14570309 8.675354003
waterfall23 12.63876329 10.5223999 11.472831274 13.314941407 0 12.66552734 11.40634155 12.6048929 11.43774673 8.79888916
field26 11.07823394 7.302185059 10.691568116 2.754882813 12.66552734 0 3.349212646 8.966176812 11.82766924 8.203674316
mountain_030 10.02510284 6.417022705 9.663827636 3.998626709 11.40634155 3.349212646 0 8.78585096 11.99428394 7.732574462
马_081 8.415467337 6.146172005 10.65966088 9.028326501 12.6048929 8.966176812 8.78585096 0 8.054160894 11.09364108
bison_052 8.194840093 10.44835499 9.392413014 12.145703089 11.43774673 11.82766924 11.99428394 8.054160894 0 12.86955948
ibis_040 13.45505618 5.149291993 12.586018896 8.675354003 8.79888916 8.203674316 7.732574462 11.09364108 12.86955948 0

我需要的是获取一个元组列表,例如下面的那个,其中名称之前的字符串是列表距离的每个元组的第一个元素的相应结果......这就是对应的名称最小值...

您可以在下表中看到的方式:

enter image description here

输出

  [[("highway_bost174",0),("ibis_142",("highway_bost174",4.088197921),7.668395996),10.5223999),7.302185059),( "ibis_142",6.417022705),6.146172005),8.194840093),5.149291993)]...]

请只向我发送基于 Python 本地库的内容

解决方法

import itertools
arrayFiles = []
for subset in itertools.combinations(distances,2):
    one = subset[0]
    two = subset[1]
    one_tup = [(subset[0][0],x) for x in subset[0][1]]
    two_tup = [(subset[1][0],x) for x in subset[1][1]]
    pair = [(o,two_tup[i]) for (i,o) in enumerate(one_tup)]
    res_list = []
    for e in pair:
        if e[1][1] > e[0][1]:
            res_list.append(e[0])
        else:
            res_list.append(e[1])
    arrayFiles.append(res_list)   

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?