如何替换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
完全由两个元素序列组成。