2 回答
TA贡献1799条经验 获得超9个赞
代码“print(fps[n][3], fps[n+1:][3])”将首先打印主/父列表的元素 [n[ 的子列表的索引 [3] 处的元素。但之后,它将打印剩余的父列表,如代码所示“[n+1:]”。分号告诉程序从元素 n+1 开始获取列表直到末尾。相反,尝试运行嵌套循环来打印一对多关系,例如:
for one in fps:
for many in fps:
print(one[3], many[3])
外循环将从主列表中获取一个元素并将其传递给内循环。内部循环将保留从外部循环传递的初始元素,并从主循环中获取每个元素并打印两者的第三个元素,直到每个元素完成为止。然后,外循环将下一个元素传递给内循环,依此类推。
TA贡献1828条经验 获得超3个赞
如果您想要的是这个列表:
fps = [[0,0,0,1], [0,0,0,2], [0,0,0,3], [0,0,0,4]]
你的预期输出应该是这样的:
1 2
1 3
1 4
----------
2 1
2 3
2 4
----------
3 1
3 2
3 4
----------
4 1
4 2
4 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):
one_fourth_item = i[3]
for index_j,j in enumerate(fps):
many_fourth_item = j[3]
if index_i != index_j:
print(one_fourth_item, many_fourth_item)
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”?
添加回答
举报