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

1 投票
2 回答
2025 浏览
提问于 2025-04-19 06:18

在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']

非常感谢你们提前的帮助!

2 个回答

1

如果你的列表里面只包含字符,你可以这样写:

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

输出结果:

True

但是这样做不太行,比如说如果 a = ['abc', 'def', 'ghi']b = ['bc', 'd']。这样会返回 True,因为 bcd 是在 abcdefghi 里面的。

不过你可以这样写:

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

如果 a 或者 b 里面有字符 '@',你可以用一些不常用的字符来替代它。

2

我会把这个问题分成两个步骤来解决:

  1. 找到子列表的位置。

  2. 根据这个位置把子列表删除。

要找到子列表的位置,你可以这样做:

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

这个方法的效率没有Boyer-Moore算法高,但现在用这个方法是可以的。一旦你找到了位置,就可以直接删除那一部分。所以你的代码变成:

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']

撰写回答