2014-05-24 60 views
0
for row in tuple: 
    print row[6] # Error: tuple index out of range 
    storyLen = len(row[5]) 
    row = row + (storyLen,) 
    print row[6] # No Error as it's added 
    # Leave loop now 

for newRow in tuple: 
    print newRow[6] # Error: tuple index out of range 

爲什麼會發生上述情況?不應該在兩個循環之間保存數值,並且無論如何要修復它?如果它很重要,則元組是一個類屬性。Tuple的新值不保存在foreach循環外

回答

1

會發生什麼row是元組實際元素的「副本」。所以,你所做的任何更改都不會影響原始元組。 (你可以通過打印id來測試)

你能做什麼?

可以遍歷指數:

for i in range(len(tuple)): 
    storyLen = len(tuple[i][5]) 
    tuple[i] += (storyLen,) 

這工作,因爲你是直接訪問的元組的元素。

注:不要使用tuple作爲變量,因爲它會隱藏的名稱Python的內置執行型tuple的。

+2

「*會發生什麼是'row'是元組實際元素的」複製「,因此,您所做的任何更改都不會影響原始元組。*」 - 這是一個危險的誤導性陳述。 'row'變量引用循環迭代開始時引用的元組單元的對象。分配給'row'會改變'row'引用的內容,但它不會改變元組的引用。另外,'tuple [i] + =(storyLen,)'將不起作用,因爲元組是不可變的。 – user2357112

+0

@ user2357112這是否意味着在OP中沒有辦法達到我想要的效果?基督徒的建議將工作,如果我能夠像我一樣在OP中添加,但我想它只能這樣工作,因爲它引用了這些值。 編輯:我假設要做到這一點的方法是將它列入清單。 –