确定列表是否是列表的子列表

bib*_*bhu 0 python python-3.x

list1=[1,3,8,10,23,8,8,10,23,3,8,10,23,3,8,10,23]
list2=[10,23,3]
cnt=list1.count(list2[0])
cnt1=1
j=0
while (cnt1<=cnt):
    list3=[]
    list3.append(list2[0])
    i=1
    k=list1.index(list2[0])
    while (i<len(list2)):
        list3.append(list1[k+i])
        i=i+1
    print (list3)    
    if (list2==list3):
        print ("list2 is a subset")
        j=j+1
    else:
        print ("list2 is not a subset")

    list1.remove(list2[0])    
    cnt1=cnt1+1    
print (list2,"occurs",j,"times")
Run Code Online (Sandbox Code Playgroud)

我收到了这个错误.

Traceback (most recent call last):
  File "C:\Python26\Lib\idlelib\sublist.py", line 12, in <module>
    list3.append(list1[k+i])
IndexError: list index out of range"
Run Code Online (Sandbox Code Playgroud)

Ter*_*ryA 5

你肯定过于复杂了 - 到了你的策略究竟是什么并不明显的地步.

这是一个可以尝试和集成的简单算法:

  1. 得到的长度 list2
  2. 迭代list1,访问长度列表的切片list2(例如,第一个切片将是[1, 3, 8],然后下一个切片将是[3, 8, 10]
  3. 检查切片是否等于list2- 如果是,则返回True(或将1加到计数器)
  4. 如果你到达列表的末尾 - 结束