繁体   English   中英

在嵌套列表python中查找字符串及其索引的所有出现

[英]find all occurences of a string and its indices in nested list python

我有以下格式的嵌套列表:

[['john'],['jack','john','mary'],['howard','john'],['jude']...]

我想找到嵌套列表中出现的john的前3个或5个索引(因为列表确实很长),然后返回类似(0,0),(1,1),(2,1)或建议使用任何格式。

我是嵌套列表的新手。 任何帮助将非常感激。

问题1 :这是使用嵌套理解列表的一种方法。 但是,我将看看是否有欺骗。

nested_list = [['john'],['jack','john','mary'],['howard','john'],['jude']]

out = [(ind,ind2) for ind,i in enumerate(nested_list) 
                  for ind2,y in enumerate(i) if y == 'john']

print(out)

返回: [(0, 0), (1, 1), (2, 1)]


更新:在这里可以找到类似的东西在python的嵌套列表中查找元素的索引 但是,答案仅取第一个值,该值可以转换为:

out = next(((ind,ind2) for ind,i in enumerate(nested_list) 
                       for ind2,y in enumerate(i) if y == 'john'),None)
print(out) # (0,0) 

问题2 :(来自评论)

是的,通过'john' in y y == 'john'编辑为: 'john' in y这非常容易。

nested_list = [['john xyz'],['jack','john dow','mary'],['howard','john'],['jude']]

out = [(ind,ind2) for ind,i in enumerate(nested_list) 
                  for ind2,y in enumerate(i) if 'john' in y]
print(out)

返回: [(0, 0), (1, 1), (2, 1)]


问题3 :(来自评论)

获取前N个元素的最有效方法是使用pythons库itertools,如下所示:

import itertools

nested_list = [['john xyz'],['jack','john dow','mary'],['howard','john'],['jude']]

gen = ((ind,ind2) for ind,i in enumerate(nested_list) 
                       for ind2,y in enumerate(i) if 'john' in y)

out = list(itertools.islice(gen, 2)) # <-- Next 2
print(out)

返回: [(0, 0), (1, 1)]

这在这里也得到了回答: 如何从Python的生成器或列表中获取前N个项目?


问题3扩展:

并说出您想将它们分成N个块,然后可以执行以下操作:

import itertools

nested_list = [['john xyz'],['jack','john dow','mary'],['howard','john'],['jude']]

gen = ((ind,ind2) for ind,i in enumerate(nested_list) 
                       for ind2,y in enumerate(i) if 'john' in y)

f = lambda x: list(itertools.islice(x, 2)) # Take two elements from generator

print(f(gen)) # calls the lambda function asking for 2 elements from gen
print(f(gen)) # calls the lambda function asking for 2 elements from gen
print(f(gen)) # calls the lambda function asking for 2 elements from gen

返回:

[(0, 0), (1, 1)]
[(2, 1)]
[]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM