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

时间:2013-03-08 20:41:42

标签: python list

我有一个这样的清单:

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

我正在尝试编写一个以第n个列表元素作为参数的函数,并用“X”替换0。例如: 函数replace([1, 2])可以:

 a = [['0', 'X'], ['X', '0'], ['0', '0']]
换句话说,替换函数应该将a视为连续列表。

由于每个列表都是单个元素,我认为不可能。这可能吗?

3 个答案:

答案 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 :(得分: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 :(得分: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]]
相关问题