如何在Python的列表中查找项的位置?
我想在一个包含多个列表的列表中找到某个特定项目的位置。结果应该是一个包含多个元组的列表,每个元组代表这个项目在列表中的位置。举个例子:
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)]