我有一個這樣的名單:如何在Python中替換多維列表中的第n個元素?
a = [['0', '0'], ['0', '0'], ['0', '0']]
我試圖寫一個函數,它接受第n個列表元素作爲參數,並用「X」代替0。例如: 功能replace([1, 2])
會做:
a = [['0', 'X'], ['X', '0'], ['0', '0']]
換句話說
,替換功能應該把一個作爲一個連續的列表。
由於每個列表是一個單一的元素,我不認爲這是可能的。這可能嗎?
我有一個這樣的名單:如何在Python中替換多維列表中的第n個元素?
a = [['0', '0'], ['0', '0'], ['0', '0']]
我試圖寫一個函數,它接受第n個列表元素作爲參數,並用「X」代替0。例如: 功能replace([1, 2])
會做:
a = [['0', 'X'], ['X', '0'], ['0', '0']]
換句話說
,替換功能應該把一個作爲一個連續的列表。
由於每個列表是一個單一的元素,我不認爲這是可能的。這可能嗎?
考慮:
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]]
感謝您的精彩答案。但請在更新後的問題中查看我的示例輸出。 – pynovice 2013-03-08 21:03:55
你的replace()
函數沒有任何意義,但是在你想要的任何列表中替換你想要的任何東西當然是可能的,而且確實微不足道。
>>> a = [['0', '0'], ['0', '0'], ['0', '0']]
>>> a[0][1] = '1'
>>> a[1][0] = '2'
>>> a
[['0', '1'], ['2', '0'], ['0', '0']]
>>>
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']]
您可以通過使用'a [int(math.floor(i/2))] [i%2]'去除'if'條件。該代碼要求'a'完全由兩元素序列組成。 – 2013-03-08 21:21:41
現在看起來更可讀:) – hymloth 2013-03-08 21:26:38
你的例子讓我們知道,應該用什麼語義「替換」?爲什麼結果看起來像它呢? – 2013-03-08 20:47:50
查看我更新的問題 – pynovice 2013-03-08 20:55:19
您的更新確實無濟於事。 '[1,2]'和更新的'a'之間的連接是什麼? – 2013-03-08 20:57:48