2013-12-11 33 views
0

最近出現了一個奇怪的問題。我試圖改變我已經轉換爲列表的元組中的項目。Python:將Tuple中的項目轉換爲列表

但我有什麼,

paths = [(1,2),(2,3),(2,0)] 
plist = [] 

for pathlist in paths: 
    for n in range(0, len(pathlist)): 
     if pathlist[n] == 2: 
      plist = list(pathlist) 
      plist[n] = 4 
      pathlist = tuple(plist) 
      print(pathlist) 
print(paths) 

實際上並沒有在列表中paths,即改變它的值保持不變最初,即使我可以從print(pathlist)告訴大家,它已經被正確修改。我不能刪除它並追加它,因爲這會抵消for循環。感謝您的幫助,夥計們。

+1

你打算在這裏做什麼?我不確定我是否理解你期望的'路徑'是... – mgilson

回答

1

pathlist var是一個新的實例,它不會影響路徑列表成員。

試試這個:

for i in range(len(paths)): 
    pathlist = paths[i] 
    for n in range(0, len(pathlist)): 
     if pathlist[n] == 2: 
      plist = list(pathlist) 
      plist[n] = 4 
      paths[i] = tuple(plist) 
      print(paths[i]) 
0

只更改列表,複製你修改。你並沒有直接修改paths

做這樣的:

>>> for i, pl in enumerate(paths): 
    for j, n in enumerate(pl): 
     if n==2: 
      pl = list(pl) 
      pl[j] = 4 
      paths[i] = pl 


>>> paths 
[[1, 4], [4, 3], [4, 0]] 
0

你應該pathlist追加到每匝一些列表...試試這個

paths = [(1,2),(2,3),(2,0)] 
flist = [] 
for pathlist in paths: 
    for n in range(0, len(pathlist)): 
     if pathlist[n] == 2: 
      plist = list(pathlist) 
      plist[n] = 4 
      pathlist = tuple(plist) 
      flist.append(pathlist) 
print(flist) 

輸出將被

[(1, 4), (4, 3), (4, 0)] 
0

雖然最初pathlist指向path的一個元素,但當它被重新綁定時,該鏈接會丟失gned在循環內。

for pathlist in paths: 
    ... 
    pathlist = 'new value' 

試試這個更簡單的情況與整數列表。 alist未更改。

alist = [1,2,3] 
for x in alist: 
    x = x*2 

但如果元素列表,它們可以在不失去鏈接到alist改變。

alist = [[1],[2],[3]] 
for x in alist: 
    x[0] = x[0]*2 

不幸的是,爲了這些目的,你的元組更像整數而不是列表。您必須使用索引來修改alist[i],或者像在列表理解答案中那樣重建列表。