我有一个像这样的列表:
a = [['0', '0'], ['0', '0'], ['0', '0']]
我正在尝试编写一个函数,它以第n个列表元素作为参数,并将0替换为'X'。例如:函数
replace([1, 2])
将执行以下操作: a = [['0', 'X'], ['X', '0'], ['0', '0']]
换句话说,replace函数应该将a视为一个连续的列表。 由于每个列表都是一个单独的元素,我认为这是不可能的。这可行吗?
replace()
函数没有意义,但是在任何你想要的列表中替换任何你想要的东西都是可能的,而且确实很容易。>>> a = [['0', '0'], ['0', '0'], ['0', '0']]
>>> a[0][1] = '1'
>>> a[1][0] = '2'
>>> a
[['0', '1'], ['2', '0'], ['0', '0']]
>>>
replace([1,2])
毫无意义——为什么它会产生你所说的输出? [1,2]
和对a
的更改之间可能有什么联系? - Francis Avilaimport 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
正好由两个元素组成的序列。 - Francis Avilaa = [['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]]
replace
应该具有什么语义?为什么结果应该看起来像它现在这样? - Daniel Frey[1,2]
和更新后的a
之间有什么联系? - Francis Avila'X'
。 - Francis Avila