如何在列表理解中获取元组列表

问题描述

那里

我想做的是将一个元组添加到列表理解中的元组列表中 我有以下代码... 子集 = [list(m).extend(initialMedoid) for m in list(itertools.combinations(distances,2))]

例如我有以下数据样本:

输入

 initialMedoid = [('ibis_142',[8.708170812,0.0,10.518235207,7.668395996,10.522399903,7.302185059,6.417022705,6.146172005,10.448354985,5.149291993])]
 arr = [[('highway_bost174',[0.0,8.708170812,4.088197921,11.366319879999999,12.638763287,11.078233943,10.025102839,8.415467337,8.194840093,13.455056175000001]),('street_par88',[4.088197921,11.135904053,11.472831274,10.691568116,9.663827636,10.659660884000001,9.392413013999999,12.586018896])],[('highway_bost174',('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])],[('street_par88',12.586018896]),[('opencountry_241',8.675354002999999]),[('waterfall23',8.79888916]),[('field26',8.203674316]),[('mountain_030',7.7325744620000005]),[('horse_081',11.093641082000001]),[('bison_052',12.869559482]),0.0])]]

我想得到它在预期的输出中呈现

但相反,我得到了一堆无

[None,None,None]

预期输出

[[('highway_bost174',('ibis_142',5.149291993])],0.0]),5.149291993])]]

解决方法

是否要将 initialMedoid 附加到 arr 的每个列表元素?

subset = [m.append(initialMedoid[0]) for m in arr]
,
initialMedoid = [('ibis_142',[8.708170812,0.0,10.518235207,7.668395996,10.522399903,7.302185059,6.417022705,6.146172005,10.448354985,5.149291993])]
 arr = [[('highway_bost174',[0.0,8.708170812,4.088197921,11.366319879999999,12.638763287,11.078233943,10.025102839,8.415467337,8.194840093,13.455056175000001]),('street_par88',[4.088197921,11.135904053,11.472831274,10.691568116,9.663827636,10.659660884000001,9.392413013999999,12.586018896])],[('highway_bost174',('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])],[('street_par88',12.586018896]),[('opencountry_241',8.675354002999999]),[('waterfall23',8.79888916]),[('field26',8.203674316]),[('mountain_030',7.7325744620000005]),[('horse_081',11.093641082000001]),[('bison_052',12.869559482]),0.0])]]   
secArray = []
    for n in arr: 
      n = list(n)
      n.extend(initialMedoid)
      secArray.append(n)
,

您在列表理解中执行 list.append 并且 .append 方法返回 None 所以最后您得到 None 的列表

您可以直接使用原始列表而不是列表理解的输出。

检查下面的例子:

如果您不想更改原始列表,则可以使用 arr 代替其副本。

arr_copy = arr.copy()
[x.extend(initialMedoid) for x in arr_copy]
print(arr_copy)

以上代码将在您的 initialMedoid 的每个子列表中附加 arr

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...