4

私はこのようなリストを持っています:

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

n番目のリスト要素を引数として取り、0を「X」に置き換える関数を作成しようとしています。例:関数replace([1, 2])は次のことを行います:

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

つまり、replace関数はaを連続リストとして扱う必要があります。

すべてのリストは単一の要素であるため、それは不可能だと思います。これは可能ですか?

4

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']]
>>> 
于 2013-03-08T20:47:08.553 に答える
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']]
于 2013-03-08T21:05:57.430 に答える
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]]
于 2013-03-08T20:59:25.983 に答える