[英]Check if index of elements in two lists are consecutive
如果將list1定義為[15,1,20]
並且將list2定義為[6,15,3,1,6,20]
該函數將返回True,因為列表2包含(15,1,20)
的順序相同。
但是,如果列表2定義為[6,1,15,20,3]
,則序列為(1,15,20)
因此它將返回False。
def sublist(lst1,lst2):
for i in lst1:
if i in lst2:
if ## ?? ##
return True
return False
if語句讓我感到困惑,因為我不確定如何檢查兩個不同列表中的連續數字。
從輸入列表中取一個項目,然后向前掃描第二個列表,直到找到匹配項,然后取下一個項目,繼續向前,依此類推。
使用迭代器,對下一個值進行測試就足夠簡單了。 使用iter()
為lst1
創建一個迭代器,然后next()
函數為您提供列表順序中的下一項。 當該調用引發StopIteration
您知道已經測試了第一個列表中的所有值:
def sublist(lst1, lst2):
source = iter(lst1)
try:
item = next(source)
for value in lst2:
if item == value:
item = next(source)
return False
except StopIteration:
# all items in lst1 checked
return True
演示:
>>> lst1 = [15, 1, 20]
>>> sublist(lst1, [6, 15, 3, 1, 6, 20])
True
>>> sublist(lst1, [6, 1, 15, 20, 3])
False
請注意該函數也返回True
如果lst1
是空的(空表始終是一個有序的子集)和False
,如果lst1
不是空的,但lst2
是 (空列表永遠是一個超集)。
根據list.index
方法的start
參數,以下內容將起作用:
def sublist(lst1, lst2):
ind = 0
for a in lst1:
try:
ind = lst2.index(a, ind)
except ValueError:
return False
return True
>>> sublist([1,2,3], [4,1,3,2,5])
False
>>> sublist([1,2,3], [4,1,2,5,3])
True
這將迭代查找lst2
的lst1
元素,同時適當地向前移動查找的起始索引,直到在lst2
的其余部分中找不到任何元素或找到所有元素為止。
獲取第二個列表中原始列表中每個項目的索引列表,並檢查它們的任何組合是否按升序排列
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.