与えられた:
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]]