Python: Return 2 ints for index in 2D lists given item

[亡魂溺海] 提交于 2019-11-26 18:34:38

问题


I've been tinkering in python this week and I got stuck on something.
If I had a 2D list like this:

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

and I did this

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

it would return

1

However, I want the index of something in side one of the lists, like this

    >>>myList.index(3)

and it would return

1, 0

Is there anything that can do this?

Cheers


回答1:


Try this:

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

Usage:

>>> index_2d(myList, 3)
(1, 0)



回答2:


If you are doing many lookups you could create a mapping.

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


There is nothing that does this already, unless it's in numpy, which I don't know much about. This means you'll have to write code that does it. And that means questions like "What does [[1, 2], [2, 3], [3, 4]].index(3) return?" are important.




回答4:


Using simple genexpr:

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

Example

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)

This will return more than one instance of the sub list, if any.




回答6:


Try this! this worked for me :)

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:


Based on kevpie's answer I managed to get a 2D list containing the coordinates of all occurences

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]

Now coordsList contains all indexes for value 1 in myList :

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


来源:https://stackoverflow.com/questions/5775352/python-return-2-ints-for-index-in-2d-lists-given-item

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!