14

这周我一直在修补 python,但遇到了一些问题。
如果我有这样的二维列表:

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

我做了这个

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

它会回来

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

使用简单的基因expr:

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 回答
0

试试这个!这对我有用:)

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);
于 2017-01-28T18:25:12.203 回答
0

根据kevpie的回答,我设法获得了一个包含所有出现坐标的二维列表

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]

现在 coordsList 包含 myList 中值 1 的所有索引:

[[0, 1], [1, 0], [1, 1], [3, 0]]
于 2018-06-07T13:56:36.457 回答