Python 检查字符串列表是否包含字符串序列

Python 检查字符串列表是否包含字符串序列,python,Python,python中是否有一个方法可以检查这一点,并且其顺序必须相同 a = ['a', 'b', 'c'] b = ['b', 'c'] if a contains b: c = remove b from a c = ['a'] 如果b=['c','b'] c应该等于a,c=['a','b','c'] 非常感谢您事先的帮助 如果您的列表只包含字符,那么您肯定可以编写 打印“”。在“”中加入(b)。加入(a) 输出: True 这不起作用,例如,如果a=['abc','def','g

python中是否有一个方法可以检查这一点,并且其顺序必须相同

a = ['a', 'b', 'c']
b = ['b', 'c']

if a contains b:
   c = remove b from a

c = ['a']
如果b=
['c','b']
c应该等于a,c=
['a','b','c']


非常感谢您事先的帮助

如果您的列表只包含字符,那么您肯定可以编写

打印“”。在“”中加入(b)。加入(a)
输出:

True
这不起作用,例如,如果
a=['abc','def','ghi']
b=['bc','d']
。它产生
True
,因为
bcd
abcdefghi

但你可以写:

print '@'+'@'.join(b)+'@' in '@'+'@'.join(a)+'@'

如果
a
b
包含带有字符
'@'
的项目,您可以将其替换为一些未使用的字符。

我将分两步解决此问题:

  • 查找子列表的索引

  • 移除列表中给定索引的子列表

  • 要查找子列表的索引,可以执行以下操作:

    def index(l, s):
        len_s = len(s)
        for pos in range(len(l) - len_s + 1):
            if l[pos:pos + len_s] == s:
                return pos
        return -1
    
    它的效率不如以前那么高,但目前还可以。一旦有了索引,就可以简单地删除切片。因此,您的代码变成:

    a = ['a', 'b', 'c']
    b = ['b', 'c']
    
    pos = index(a, b)
    if pos >= 0:
        c = list(a)
        del c[pos:pos + len(b)]
    
    # c = ['a']
    

    据我所知,这不是(链接问题的)重复,因为它意味着删除按给定顺序出现的子列表。比如说
    a=['b','b','b']
    b=['b','b']
    。您希望
    c
    是什么?这种情况不可能发生,因为b应该只包含不同的值。好的,那么让我们假设您有
    ['b','b','c','c']
    ['b','c']
    。你想从中得到什么?c应该是['b','c']
    '-'。在'-'中加入(b)。加入(a)
    ?@Sorin:我也这么想。但这并不能解决问题
    bc-d
    仍在
    abc def ghi
    中。如果a是['rtz','qwe','asd','qwe'],而b是['asd','qwe'],它产生['r','t','s','d','q','w','e'],但结果应该是['rtz','qwe它对我有效。在你的解释器中试试这个:
    a=['rtz','qwe','asd','qwe'];b=['asd','qwe'];pos=指数(a,b);c=a[:];delc[pos:pos+len(b)];嗯,奇怪,我不知道我在那里做了什么;),现在好像可以工作了,谢谢!