14

私は今週Pythonをいじくり回していて、何かに行き詰まりました。
このような2Dリストがある場合:

myList = [[1,2],[3,4],[5,6]]

そして私はこれをしました

>>>myList.index([3,4])

それは戻るだろう

1

ただし、次のように、リストの1つにあるもののインデックスが必要です。

    >>>myList.index(3)

そしてそれは戻るだろう

1, 0

これを行うことができるものはありますか?

乾杯

4

7 に答える 7

21

これを試して:

def index_2d(myList, v):
    for i, x in enumerate(myList):
        if v in x:
            return (i, x.index(v))

使用法:

>>> index_2d(myList, 3)
(1, 0)
于 2011-04-25T05:14:09.053 に答える
4

多くのルックアップを実行している場合は、マッピングを作成できます。

>>> myList = [[1,2],[3,4],[5,6]]
>>> d = dict( (j,(x, y)) for x, i in enumerate(myList) for y, j in enumerate(i) )
>>> d
{1: (0, 0), 2: (0, 1), 3: (1, 0), 4: (1, 1), 5: (2, 0), 6: (2, 1)}
>>> d[3]
(1, 0)
于 2011-04-25T08:26:10.277 に答える
2

シンプルなgeneexprを使用:

def index2d(list2d, value):
    return next((i, j) for i, lst in enumerate(list2d) 
                for j, x in enumerate(lst) if x == value)

print index2d([[1,2],[3,4],[5,6]], 3)
# -> (1, 0)
于 2011-04-25T06:52:32.503 に答える
1

私がよく知らないnumpyでない限り、これを行うものは何もありません。これは、それを行うコードを作成する必要があることを意味します。[[1, 2], [2, 3], [3, 4]].index(3)つまり、「返されるものは何ですか?」というような質問を意味します。重要です。

于 2011-04-25T05:12:55.613 に答える
0
def td(l,tgt):
    rtr=[]
    for sub in l:
        if tgt in sub:
            rtr.append(    (l.index(sub),sub.index(tgt))    )

    return rtr        


myList = [[1,2],[3,4],[5,6]]

print td(myList,3)

これにより、サブリストの複数のインスタンスが返されます(存在する場合)。

于 2011-04-25T05:21:54.027 に答える