簡體   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