如何在Python中替换多维列表的第n个元素?

4

我有一个像这样的列表:

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

我正在尝试编写一个函数,它以第n个列表元素作为参数,并将0替换为'X'。例如:函数replace([1, 2])将执行以下操作:
 a = [['0', 'X'], ['X', '0'], ['0', '0']]

换句话说,replace函数应该将a视为一个连续的列表。 由于每个列表都是一个单独的元素,我认为这是不可能的。这可行吗?

4
你的例子没有意义,replace应该具有什么语义?为什么结果应该看起来像它现在这样? - Daniel Frey
1
你的更新并没有帮助。 [1,2] 和更新后的 a 之间有什么联系? - Francis Avila
[1, 2] 表示应该被替换的列表元素。元素1必须被替换为“X”,元素2必须被替换为“2”。 - pynovice
但是在你的示例输出中没有 'X' - Francis Avila
a = [['0', 'X'], ['X', '0'], ['X', '0']] - pynovice
显示剩余3条评论
3个回答

2
你的replace()函数没有意义,但是在任何你想要的列表中替换任何你想要的东西都是可能的,而且确实很容易。
>>> a = [['0', '0'], ['0', '0'], ['0', '0']]
>>> a[0][1] = '1'
>>> a[1][0] = '2'
>>> a
[['0', '1'], ['2', '0'], ['0', '0']]
>>> 

我知道可以这样做。我想创建一个函数,它接受元素参数并执行此任务。 - pynovice
我相信这是可能的,但是什么是“元素参数”?再次强调,你的replace([1,2])毫无意义——为什么它会产生你所说的输出? [1,2]和对a的更改之间可能有什么联系? - Francis Avila
[1, 2] 表示应该被替换的列表元素。元素1必须被替换为“X”,元素2必须被替换为“2”。请查看我的更新问题。 - pynovice

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']]

您可以通过使用 a [int(math.floor(i / 2))] [i%2] 来删除 if 条件。此代码要求 a 正好由两个元素组成的序列。 - Francis Avila

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]]

感谢您的精彩回答。但请查看我在更新的问题中提供的样本输出。 - pynovice

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接