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”?
添加回答
舉報