如何在Python中替换多维列表的第n个元素?
我有一个这样的列表:
a = [['0', '0'], ['0', '0'], ['0', '0']]
我想写一个函数,这个函数接收列表中的第n个元素作为参数,并把其中的0替换成'X'。比如说,函数replace([1, 2])
应该这样做:
a = [['0', 'X'], ['X', '0'], ['0', '0']]
换句话说,替换函数应该把a当作一个连续的列表来看待。
因为每个列表都是一个单独的元素,我觉得这可能不太行。这样做可能吗?
3 个回答
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']]
当然可以!请把你想要翻译的内容发给我,我会帮你把它变得简单易懂。
2
你的 replace()
函数听起来不太对劲,不过其实在任何列表中替换你想要的东西是完全可能的,而且非常简单。
>>> a = [['0', '0'], ['0', '0'], ['0', '0']]
>>> a[0][1] = '1'
>>> a[1][0] = '2'
>>> a
[['0', '1'], ['2', '0'], ['0', '0']]
>>>
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]]