Python: возвращает 2 ints для индекса в 2D-списках данного элемента

На этой неделе я возился с питоном и кое-что застрял.
Если бы у меня был двухмерный список вроде этого:

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

и я сделал это

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

он вернется

1

Тем не менее, я хочу, чтобы указатель чего-то находился в стороне одного из списков, например,

    >>>myList.index(3)

и он вернется

1, 0

Есть ли что-нибудь, что может сделать это?

ура

Ответ 1

Попробуйте следующее:

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)

Ответ 2

Если вы делаете много поисков, вы можете создать сопоставление.

>>> 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)

Ответ 3

Нет ничего, что бы это делало, если только оно не было в numpy, о котором я мало что знаю. Это означает, что вам придется писать код, который это делает. И это означает, что такие вопросы, как "Что возвращает [[1, 2], [2, 3], [3, 4]].index(3)?"? важны.

Ответ 4

Используя простой ген xpr:

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)

Ответ 5

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)

Это приведет к возврату нескольких экземпляров суб-списка, если таковые имеются.

Ответ 6

Попробуйте это! это сработало для меня:)

def ret_pos(mylist,val_to_find):
    for i in (len(mylist)):
        for j in (len(i)):
            if mylist[i][j]== val_to_find:
                postn=[i,j]
    return(postn);

Ответ 7

На основе ответа kevpie мне удалось получить 2D-список, содержащий координаты всех вхождений

myList = [[0,1],[1,1],[0,0],[1,0]]
coordsList = [[x, y] for x, li in enumerate(myList) for y, val in enumerate(li) if val==1]

Теперь список координат содержит все индексы для значения 1 в myList:

[[0, 1], [1, 0], [1, 1], [3, 0]]