[英]Python: finding the indices of a list that match the given sublist
假設有兩個Python列表:
my_list = ['a', 'bb', 'c', 'bb', 'cc', 'bbc']
sublist = ['bb', 'bb', 'bbc']
顯然, 子列表由* my_list *的第1、3和5個元素組成。 現在,鑒於這兩個列表,我想獲取索引[1, 3, 5]
。 有沒有簡單的方法可以做到這一點?
注意:
您可以使用生成器:
def indices(lst, items):
last_index = 0
for item in items:
last_index += lst.index(item, last_index + 1) + 1
yield last_index
@Blender的方法非常適合列表(這是所有此問題所必需的),這種方法對於所有可迭代對象都更通用
>>> def indices(a, b): # find indices of items from b inside a
enumerate_a = enumerate(a)
for x in b:
for i, y in enumerate_a:
if x == y:
yield i
break
>>> list(indices(['a', 'bb', 'c', 'bb', 'cc', 'bbc'], ['bb', 'bb', 'bbc']))
[1, 3, 5]
def get_indices(lst, sublist):
result = []
i = 0
for x in sublist:
result.append(lst.index(x, i))
i = result[-1] + 1
return result
例子:
>>> get_indices(['a', 'bb', 'c', 'bb', 'cc', 'bbc'], ['bb', 'bb', 'bbc'])
[1, 3, 5]
>>> get_indices(['a', 'bb', 'c', 'bb', 'cc', 'bbc'], ['c', 'bb', 'bbc'])
[2, 3, 5]
我的解決方案
def getIndex(list, sublist):
index = []
j = 0;
for i in range(len(list)):
if(sublist[j] == list[i]):
index.append(i)
j += 1
return index
它的工作原理是?
$ python -i p.py
>>> getIndex(['bb', 'aa', 'bb'], ['aa', 'bb'])
[1, 2]
>>> getIndex(['a', 'bb', 'c', 'bb', 'cc', 'bbc'], ['bb', 'bb', 'bbc'])
[1, 3, 5]
>>> getIndex(['a', 'bb', 'c','bbc', 'bb', 'cc', 'bbc'], ['bb', 'bb', 'bbc'])
[1, 4, 6]
請有人讓我知道我是否還是錯。
我最喜歡Blender的答案。 但是我不認為index()函數具有參數“ start”,所以我在下面做了一些修改。
idx = 0
start = 0
for i in sublist:
idx = my_list[start:].index(i) + start
start = idx + 1
yield idx
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.