如何在Python列表中找到项目的位置?

5 python

我想在列表列表中找到特定项目的位置.它应该返回一个元组列表,其中每个元组代表该项的特定实例的索引.例如:

list = [['1', '2', '4', '6'], ['7', '0', '1', '4']]
getPosition('1')  #returns [(0, 0), (1, 2)]
and getPosition('7') #returns [(1,0)]
Run Code Online (Sandbox Code Playgroud)

Ric*_*and 7

如果你想要两种东西

  • 找到重复和
  • 处理嵌套列表(列表列表...)

你可以做以下的事情:

def get_positions(xs, item):
    if isinstance(xs, list):
        for i, it in enumerate(xs):
            for pos in get_positions(it, item):
                yield (i,) + pos
    elif xs == item:
        yield ()
Run Code Online (Sandbox Code Playgroud)

测试这个:

>>> xs = [['1', '2', '4', '6'],
...       ['7', '0', '1', '4'],
...       [ [ '0', '1', '1'], ['1']]
...       ]
>>> print list(get_positions(xs, '1'))
[(0, 0), (1, 2), (2, 0, 1), (2, 0, 2), (2, 1, 0)]
Run Code Online (Sandbox Code Playgroud)


a p*_*erd 5

对于子列表和给定项目的列表,您看起来想要返回每对对的列表列表(子列表的索引,子列表中项目的索引).您可以使用列表推导和Python的内置enumerate()函数来实现:

def getPosition(list, item):
    return [(i, sublist.index(item)) for i, sublist in enumerate(list)]
Run Code Online (Sandbox Code Playgroud)

编辑:请参阅上面/下面的@ scribble的回答.


Eli*_*ght 3

def get_positions(xs, target):
    return [(i,e.index(target)) for i,e in enumerate(xs)]
Run Code Online (Sandbox Code Playgroud)

这是一个很好的起点。大概你有某种课程,例如

class SomeClass:
    def __init__(self):
        self.xs = [['1','2','4','6'], ['7','0','1','4']]

    def get_positions(self, target):
        return [(i,e.index(target)) for i,e in enumerate(self.xs)]
Run Code Online (Sandbox Code Playgroud)

在这种情况下你会说

model = SomeClass()
model.get_position(1)    # returns [(0,0), (1,2)]
Run Code Online (Sandbox Code Playgroud)

请注意,在这两种情况下,如果您的目标不在每个子列表中,您都会遇到异常。该问题没有指定这是否是所需的行为。