2017-04-04 102 views
-2

我有一個嵌套的列表中添加了項驗證碼:在嵌套列表中添加項目?

list1 = [[1, 2, 3],[4, 5, 6]] 
total = 0 
for i in range(0, len(list1)): 
    print 'len(list1)', len(list1) 
    print 'i=', i 
    for j in range(0, len(list1[i])): 
     print 'j=', j 
     print 'list1i', list1[i] 
     total += list1[i][j] 
     print 'sub-total=', total 

print 'Final Total:', total 

完成後,該運行:

len(list1) 2 
i= 0 
j- 0 
list1i [1, 2, 3] 
sub-total= 1 
j- 1 
list1i [1, 2, 3] 
sub-total= 3 
j- 2 
list1i [1, 2, 3] 
sub-total= 6 
len(list1) 2 
i= 1 
j- 0 
list1i [4, 5, 6] 
sub-total= 10 
j- 1 
list1i [4, 5, 6] 
sub-total= 15 
j- 2 
list1i [4, 5, 6] 
sub-total= 21 
Final Total: 21 

它的工作原理,但我不明白爲什麼。喜歡,爲什麼我在開始時= 0?不應該「我」是列表中的元素嗎?我認爲這是運行for循環時發生的情況。和j一樣。另外,我和j有什麼關係?我一直在查看這段代碼並搜索視頻,似乎無法找到解釋。如果任何人都可以爲我解釋這段代碼的內容,那真的會有很多幫助。謝謝。

+0

您應該將這些問題引導給編寫此代碼的人。 – TigerhawkT3

+0

FWIW,我會用'List1中的子列表替換那些循環:對於子列表中的項目:total + = item'。你現在有什麼,'因爲我在範圍(len(...))',是一種代碼味道。在這種情況下調用'range()'通常是不必要的。 –

+3

我推薦[官方Python教程](https://docs.python.org/3.6/tutorial/index.html)。 – TigerhawkT3

回答

0

i是主列表中的索引; j是每個子列表的索引。索引和內容本身之間的區別是

for i in range(0, len(list1)): 
    # work with list1[i] 

for elem in list1: 
    # work with elem 

你可以做到這一點無論哪種方式,取決於你是否需要知道每個元素的索引,你處理它。

0
for i in range(0, len(list1)): 

使得irange()結果,這給數字列表從第一個提出來,但不包括最後一個。

ij是這些列表的索引。它就像一個數組一樣對待它,這通常是從新到Python的人試圖應用他們的舊語言技能,其中ij將代表2維數組中的xy值。

相反,Python中的更好的方式是:

total = 0 
for sublist in list1: 
    total += sum(sublist) 

甚至

total = sum(map(sum, list1)) 
+0

不要將它稱爲'list',否則你會掩蓋內置的。另外,sum(map(sum,lst))'會更短,更快。 – TigerhawkT3

+0

@ TigerhawkT3好點。我將它改正爲OP使用'list1'的方式。 – TemporalWolf

-1

爲什麼一開始我= 0?不應該「我」是列表中的元素嗎?

語句for i in range(0, len(list1)):i設置爲在外循環中從0增加到(1-列表的長度)。 i的值用作list1元素的索引。

請注意,list1的長度是2--即它有兩個本身是列表的元素。第一個元素是[1,2,3],第二個元素是[4,5,6]

以上同樣的解釋適用於j。在您提交的代碼中,j在外循環的第一次迭代中從0增加到1-(長度爲list1[0]),在外循環的第二次循環中從0增加到1-(長度爲list1[1])。 ij的組合用於索引存儲在嵌套列表中的實際數字。

從您的問題中,您似乎預計值ij引用列表的實際元素。你可以這樣做,但是語法略有不同,如下所示:

list1 = [[1, 2, 3],[4, 5, 6]] 
total = 0 
for i in list1: 
    print 'i=', i 
    for j in i: 
     print 'j=', j 
     total += j 
     print 'sub-total=', total 

print 'Final Total:', total 
+0

好的,我明白了。但是,你能解釋一下總數= 0嗎?謝謝 – Jane

+0

'total = 0'創建一個名爲total的變量並將其初始化爲0.這意味着在您輸入for循環並開始在列表中添加條目之前,total的值爲0。 – KolaB