对于列表列表的特定情况,如果您想要一个子列表编号的元组并索引到该子列表,您可以这样做:
[(i,j) for i, sl in enumerate(LoL) for j,e in enumerate(sl) if e==tgt]
演示:
>>> birds = ['duck', 'chicken', 'goose']
>>> cats = ['tiger', 'lion']
>>> humans = ['human']
>>> zoo = [birds, cats, humans]
>>> tgt='lion'
>>> [(i,j) for i, sl in enumerate(zoo) for j,e in enumerate(sl) if e==tgt]
[(1, 1)]
正确处理子列表中多个目标的潜在情况。
如果你知道你只关心第一个实例,你可以这样做:
[(i,sl.index(tgt)) for i, sl in enumerate(zoo) if tgt in sl]
如果您不在乎消除重复并且需要快速访问,则可以建立索引:
{e:(i,j) for i, sl in enumerate(zoo) for j, e in enumerate(sl)}
# {'tiger': (1, 0), 'goose': (0, 2), 'lion': (1, 1), 'human': (2, 0), 'duck': (0, 0), 'chicken': (0, 1)}
假设在每种情况下都有一个名为“bob”的人、猫和鸟:
birds = ['duck', 'chicken', 'goose', 'bob']
cats = ['tiger', 'lion','bob']
humans = ['human','bob']
您可以通过这种方式构造一个索引,以正确处理多个子列表中的多个条目:
index={}
for i, sl in enumerate(zoo):
for j, item in enumerate(sl):
index.setdefault(item, []).append((i,j))
索引变为:
{'tiger': [(1, 0)],
'goose': [(0, 2)],
'lion': [(1, 1)],
'human': [(2, 0)],
'duck': [(0, 0)],
'chicken': [(0, 1)],
'bob': [(0, 3), (1, 2), (2, 1)]}