检查列表中的子列表

use*_*221 2 python sublist

问题是:你要编写一个名为的函数,isSublist()它接受两个参数(list, sublist),1如果sublist是list的子列表则返回,否则返回0.

所以我有我的代码但是True当子列表不在列表中时我得到了.有关解决此问题的任何建议吗?

 def isSublist(list, sublist):
    for i in range(len(list)-(len(sublist))+1):
        return True
    if sublist==list[i:i+(len(sublist))]:
        return False
Run Code Online (Sandbox Code Playgroud)

样本输入:

list= (0,1,2,3,4,5,6,7,8,9)
isSublist(list, [1,2,3])
output:
True
Run Code Online (Sandbox Code Playgroud)

Joh*_*ong 7

您可以通过将所有切片放大到子列表的大小并比较相等性来解决此问题:

def n_slices(n, list_):
    for i in xrange(len(list_) + 1 - n):
        yield list_[i:i+n]

def isSublist(list_, sub_list):
    for slice_ in n_slices(len(sub_list), list_):
        if slice_ == sub_list:
            return True
    return False
Run Code Online (Sandbox Code Playgroud)

涵盖订购问题.根据定义,列表是有序的.如果我们想忽略排序,你可以做套装:

def isSubset(list_, sub_list):
    return set(sub_list) <= set(list_)
Run Code Online (Sandbox Code Playgroud)

如果我们需要覆盖重复元素并忽略排序,那么您现在处于多集合领域:

def isSubset(list_, sub_list):
    for item in sub_list:
        if sub_list.count(item) > list_.count(item):
            return False
    return True
Run Code Online (Sandbox Code Playgroud)

  • 集合有一个`<=`运算符,不需要使用union.`return set(sub_list)<= set(list_)` (2认同)