簡體   English   中英

檢查兩個列表中元素的索引是否連續

[英]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

這將迭代查找lst2lst1元素,同時適當地向前移動查找的起始索引,直到在lst2的其余部分中找不到任何元素或找到所有元素為止。

獲取第二個列表中原始列表中每個項目的索引列表,並檢查它們的任何組合是否按升序排列

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM