Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何替换Python中多维列表的第n个元素?_Python_List - Fatal编程技术网

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

如何替换Python中多维列表的第n个元素?,python,list,Python,List,我有这样一份清单: a = [['0', '0'], ['0', '0'], ['0', '0']] 我正在尝试编写一个函数,该函数以第n个list元素为参数,并将0替换为“X”。例如: 函数replace([1,2])将执行以下操作: a = [['0', 'X'], ['X', '0'], ['0', '0']] 换言之,replace函数应该将a视为一个连续列表 因为每个列表都是一个元素,所以我认为这是不可能的。这可能吗?您的replace()函数没有任何意义,但在任何列表中替换您想

我有这样一份清单:

a = [['0', '0'], ['0', '0'], ['0', '0']]
我正在尝试编写一个函数,该函数以第n个list元素为参数,并将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']]
>>> 
鉴于:

您可以展平列表:

>>> [e for sub in a for e in sub]
['0', '0', '0', '0', '0', '0']
>>> fl[1:2]='XX'
>>> fl
['0', 'X', 'X', '0', '0', '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']
如果展平列表,则可以使用切片分配:

>>> [e for sub in a for e in sub]
['0', '0', '0', '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]]

您的示例很有意义,
应该替换哪些语义?为什么结果看起来像这样?请看我更新的问题您的更新确实没有帮助。
[1,2]
与更新后的
a
之间有什么联系?[1,2]表示应替换的列表元素。元素1必须被“X”替换,元素2必须被“2”替换,但是在您的示例输出中没有
'X'
。我知道可以这样做。我想做一个函数,它接受元素参数并执行这个任务。我确信这是可能的,但什么是“元素参数”?再一次,你的
replace([1,2])
毫无意义——为什么它要产生你说它应该产生的输出?
[1,2]
与对
a
的更改之间可能存在什么联系?[1,2]表示应替换的列表元素。元件1必须替换为“X”,元件2必须替换为“2”。看我更新的问题谢谢你的精彩回答。但请查看更新问题中的示例输出。您可以使用
a[int(math.floor(i/2))][i%2]
删除
if
条件。该代码要求
a
完全由两个元素序列组成。