bugfix> python > 投稿

私は list = [0, 0, 7] を持っていますそして、私はそれを anotherList = [0, 0, 7, 0] と比較したとき in を使用するそれは私に False を与えます 。

あるリストの数字が別のリストと同じ順序であるかどうかを確認する方法を知りたいです。

したがって、 anotherList2 = [7, 0, 0, 0] を実行すると :

list in anotherList2 Falseを返します

しかし、 list in anotherList Trueを返します

回答 4 件
  • リスト a かどうかを確認する1行関数です。  リスト b にあります :

    >>> def list_in(a, b):
    ...     return any(map(lambda x: b[x:x + len(a)] == a, range(len(b) - len(a) + 1)))
    ...
    >>> a = [0, 0, 7]
    >>> b = [1, 0, 0, 7, 3]
    >>> c = [7, 0, 0, 0]
    >>> list_in(a, b)
    True
    >>> list_in(a, c)
    False
    >>>
    
    

  • リスト内の各位置を1つずつ確認する必要があります。 anotherListの繰り返しを開始します

    リストの最初の要素がanotherListの現在の要素と同じ場合、シーケンス全体が見つかるまでチェックを開始します

    プログラムは次のとおりです。

    def list_in(list,anotherList):
        for i in range(0,len(anotherList)):
            if(list[0]==anotherList[i]):
                if(len(anotherList[i:]) >= len(list)):
                    c=0
                    for j in range(0,len(list)):
                        if(list[j]==anotherList[j+i]):
                            c += 1
                            if(c==len(list)):
                                print("True")
                                return
                        else:
                            continue
    
        print("False")
        return
    list = [0,0,7]
    anotherList = [0,0,7,0]
    anotherList2 = [7,0,0,0]
    list_in(list,anotherList)
    list_in(list,anotherList2)
    
    

  • スライスを使用すると、探していることを実行する効率的な関数を書くのは非常に簡単です。

    def sequence_in(seq, target):
        for i in range(len(target) - len(seq) + 1):
            if seq == target[i:i+len(seq)]:
                return True
        return False
    
    

    次のように使用できます:

    sequence_in([0, 1, 2], [1, 2, 3, 0, 1, 2, 3, 4])
    
    

  • ここにはいくつかの素晴らしい答えがありますが、ここでは文字列を媒体として使用して取り組むことができる別の方法があります。

    def in_ist(l1, l2):
        return ''.join(str(x) for x in l1) in ''.join(str(y) for y in l2)
    
    

    これは基本的にリストの要素を文字列に変換し、 in を使用します  演算子。この場合に期待することを行い、 l1 かどうかを確認します   l2 にあります 。

あなたの答え