2013-03-08 47 views
4

我有一個這樣的名單:如何在Python中替換多維列表中的第n個元素?

a = [['0', '0'], ['0', '0'], ['0', '0']] 

我試圖寫一個函數,它接受第n個列表元素作爲參數,並用「X」代替0。例如: 功能replace([1, 2])會做:

a = [['0', 'X'], ['X', '0'], ['0', '0']] 
換句話說

,替換功能應該把一個作爲一個連續的列表。

由於每個列表是一個單一的元素,我不認爲這是可能的。這可能嗎?

+4

你的例子讓我們知道,應該用什麼語義「替換」?爲什麼結果看起來像它呢? – 2013-03-08 20:47:50

+0

查看我更新的問題 – pynovice 2013-03-08 20:55:19

+1

您的更新確實無濟於事。 '[1,2]'和更新的'a'之間的連接是什麼? – 2013-03-08 20:57:48

回答

1

考慮:

a = [['0', '0'], ['0', '0'], ['0', '0']] 

您可以拼合名單:

>>> [e for sub in a for e in sub] 
['0', '0', '0', '0', '0', '0'] 

然後要素線圖:

>>> fl=[e for sub in a for e in sub] 
>>> fl[1]=1 
>>> fl[2]=2 
>>> fl 
['0', 1, 2, '0', '0', '0'] 

你可以用切片的分配,如果你壓扁清單:

>>> fl[1:2]='XX' 
>>> fl 
['0', 'X', 'X', '0', '0', '0', '0', '0', '0', '0', '0'] 

然後重新組合分組,如果你選擇:

>>> [list(e) for e in zip(*[fl[i::2] for i in range(2)])] 
[['0', 'X'], ['X', '0'], ['0', '0']] 

您也可以轉化爲多維標:

li=[[1,2,3],[4,5],[6],[7,8,9,10]] 

def xlate(li,wanted): 
    idx=0 
    for i,e in enumerate(li): 
     for j,e_ in enumerate(e): 
      if idx==wanted: return (i,j) 
      idx+=1 


    return (None,None)   

t=xlate(li,5) 
li[t[0]][t[1]]='X' 

打印:

[[1, 2, 3], [4, 5], ['X'], [7, 8, 9, 10]] 
+0

感謝您的精彩答案。但請在更新後的問題中查看我的示例輸出。 – pynovice 2013-03-08 21:03:55

2

你的replace()函數沒有任何意義,但是在你想要的任何列表中替換你想要的任何東西當然是可能的,而且確實微不足道。

>>> a = [['0', '0'], ['0', '0'], ['0', '0']] 
>>> a[0][1] = '1' 
>>> a[1][0] = '2' 
>>> a 
[['0', '1'], ['2', '0'], ['0', '0']] 
>>> 
+0

我知道可以這樣做。我想創建一個採用元素參數並執行此任務的函數。 – pynovice 2013-03-08 20:53:21

+0

我相信這是可能的,但什麼是「元素參數」?再一次,你的'替換([1,2])'沒有任何意義 - 爲什麼它應該產生你所說的輸出? '[1,2]'和'a'的變化有什麼可能的聯繫? – 2013-03-08 20:57:05

+0

[1,2]表示應該替換的列表元素。元素1必須用'X'代替,元素2必須用'2'代替。看到我更新的問題 – pynovice 2013-03-08 20:58:11

2
import math 
def replace(a, t): 
    for i in t: 
     a[int(math.floor(i/2))][i % 2] = "X" 

    return a 

replace([['0', '0'], ['0', '0'], ['0', '0']], [1,2]) 
>> [['0', 'X'], ['X', '0'], ['0', '0']] 
+0

您可以通過使用'a [int(math.floor(i/2))] [i%2]'去除'if'條件。該代碼要求'a'完全由兩元素序列組成。 – 2013-03-08 21:21:41

+0

現在看起來更可讀:) – hymloth 2013-03-08 21:26:38

相關問題