如何在Python中从2D列表中打印1到多个项目

我有一个包含 4 个项目的 2D 列表对象fps,该对象的长度为 2006(2006 行,每行包含 4 个元素)。该对象看起来像


['0012', 'CCN[C@H]1CN', <rdkit.Chem.rdchem.Mol object at 0x7fea177a0260>, <rdkit.DataStructs.cDataStructs.ExplicitBitVect object at 0x7fea0f2fd030>]

['0015', 'CCN[H@H]1CN', <rdkit.Chem.rdchem.Mol object at 0x7fea177a0260>, <rdkit.DataStructs.cDataStructs.ExplicitBitVect object at 0x7fea0f2fd030>]

  ... so on

我只想打印4th items. 所以我的代码是


for n in range(len(fps)-1): 

  print(fps[n][3])

输出看起来像


<rdkit.DataStructs.cDataStructs.ExplicitBitVect object at 0x7fcfa09f3170>

<rdkit.DataStructs.cDataStructs.ExplicitBitVect object at 0x7fcfa09f31c0>

<rdkit.DataStructs.cDataStructs.ExplicitBitVect object at 0x7fcfa09f3210>

现在我想将所有第四个元素打印为1 to many关系类型。更具体地说,fps[n][3]将打印所有其余元素2005(仅第四列),依此类推。所以我写了这个


for n in range(len(fps)-1): 

  print(fps[n][3], fps[n+1:][3]) #Can I use for mapping

但是,我的代码对于第一次打印没有问题,但对于第二次打印却出现错误。第二个给出整体2d list。输出看起来像


    <rdkit.DataStructs.cDataStructs.ExplicitBitVect object at 0x7fde5df8f300> ['00299', 'Nc1nc(=O)c2ncn(CCC(CO)CO)c2[nH]1', <rdkit.Chem.rdchem.Mol object at 0x7fde5dfde530>, <rdkit.DataStructs.cDataStructs.ExplicitBitVect object at 0x7fde5df8f440>]

<rdkit.DataStructs.cDataStructs.ExplicitBitVect object at 0x7fcfa09f34e0> ['15617', 'OC[C@H](O)[C@@H](O)[C@H](O)[C@H](O)CO[C@H]1O[C@H](CO[C@H]2O[C@H](CO)[C@@H](O)[C@H](O)[C@H]2O)[C@@H](O)[C@H](O)[C@H]1O.[Fe+3]', <rdkit.Chem.rdchem.Mol object at 0x7fcfa0a455d0>, <rdkit.DataStructs.cDataStructs.ExplicitBitVect object at 0x7fcfa09f3620>]

我的预期输出是这样的


<rdkit.DataStructs.cDataStructs.ExplicitBitVect object at 0x7fcfa09f3170> <rdkit.DataStructs.cDataStructs.ExplicitBitVect object at 0x7fcfa09f31c0>

<rdkit.DataStructs.cDataStructs.ExplicitBitVect object at 0x7fcfa09f3170> <rdkit.DataStructs.cDataStructs.ExplicitBitVect object at 0x7fcfa09f3210>  

对于更一般的方式我的预期输出


element_1 element_2

element_1 element_3 

element_1 element_4

........

element_1 element_2006

element_2 element_1

element_2 element_3

......


可以用这种方式打印吗?


慕容3067478
浏览 144回答 2
2回答

扬帆大鱼

代码“print(fps[n][3], fps[n+1:][3])”将首先打印主/父列表的元素 [n[ 的子列表的索引 [3] 处的元素。但之后,它将打印剩余的父列表,如代码所示“[n+1:]”。分号告诉程序从元素 n+1 开始获取列表直到末尾。相反,尝试运行嵌套循环来打印一对多关系,例如:for one in fps:&nbsp; &nbsp; for many in fps:&nbsp; &nbsp; &nbsp; &nbsp; print(one[3], many[3])外循环将从主列表中获取一个元素并将其传递给内循环。内部循环将保留从外部循环传递的初始元素,并从主循环中获取每个元素并打印两者的第三个元素,直到每个元素完成为止。然后,外循环将下一个元素传递给内循环,依此类推。

倚天杖

如果您想要的是这个列表:fps = [[0,0,0,1], [0,0,0,2], [0,0,0,3], [0,0,0,4]]你的预期输出应该是这样的:1 21 31 4----------2 12 32 4----------3 13 23 4----------4 14 24 3----------所以你可以这样做:fps = [[0,0,0,1], [0,0,0,2], [0,0,0,3], [0,0,0,4]]for index_i,i in enumerate(fps):&nbsp;&nbsp; &nbsp; one_fourth_item = i[3]&nbsp; &nbsp; for index_j,j in enumerate(fps):&nbsp; &nbsp; &nbsp; &nbsp; many_fourth_item = j[3]&nbsp; &nbsp; &nbsp; &nbsp; if index_i != index_j:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; print(one_fourth_item, many_fourth_item)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp; print("----------")我将尝试用您在问题()中称为“第二个”的代码来解释该问题fps[n+1:][3]:首先,我们将其简化为fps[n:][3]该部分fps[n:]将返回源列表的一部分。所以:对于 n == 0 :[[0, 0, 0, 1], [0, 0, 0, 2], [0, 0, 0, 3], [0, 0, 0, 4]]对于 n == 1 :[[0, 0, 0, 2], [0, 0, 0, 3], [0, 0, 0, 4]]对于 n == 2 :[[0, 0, 0, 3], [0, 0, 0, 4]]对于 n == 3 :[[0, 0, 0, 4]]该部分[3]将返回切片的第三个元素(来自fps[n:])因此,对于 n == 0,fps[n:][3]等于 : [[0, 0, 0, 1], [0, 0, 0, 2], [0, 0, 0, 3], [0, 0, 0, 4]][3],即[0,0,0,4]问题是,对于 n == 1(在本例中),最后一个索引是 2,所以你得到IndexError: list index out of range因此,您的代码中至少存在以下两个问题:fps[n:][3]您没有选择子列表的“第4项”,而是选择源列表的“第4项”,并且当“n”大于最后一项时你得到的索引IndexError: list index out of range。对于+1中的部分fps[n+1:][3],也许您增加是n因为您想跳过“one”元素,以避免打印“element_1 element_1”或“element_2 element_2”?
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python