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

6 投票
9 回答
6291 浏览
提问于 2025-04-15 11:32

我想在一个包含多个列表的列表中找到某个特定项目的位置。结果应该是一个包含多个元组的列表,每个元组代表这个项目在列表中的位置。举个例子:

list = [['1', '2', '4', '6'], ['7', '0', '1', '4']]
getPosition('1')  #returns [(0, 0), (1, 2)]
and getPosition('7') #returns [(1,0)]

9 个回答

4
def getPosition(list, item):
    return [(i, sublist.index(item)) for i, sublist in enumerate(list) 
                                                      if item in sublist]

当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。

6

看起来你想要的是,对于一个包含子列表的列表和一个给定的项目,返回一个包含对的列表,每对的内容是(子列表的索引,子列表中该项目的索引)。你可以使用列表推导式和Python内置的enumerate()函数来实现这个功能:

def getPosition(list, item):
    return [(i, sublist.index(item)) for i, sublist in enumerate(list)]

补充:请查看@scribble的回答,上面或下面都有。

8

如果你想要一个可以同时

  • 找出重复项,并且
  • 处理嵌套列表(就是列表里面还有列表,里面的列表里又有列表……)

你可以试试下面这样的做法:

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

测试这个:

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

撰写回答