检查字符串列表是否包含字符串序列
在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
我会把这个问题分成两个步骤来解决:
找到子列表的位置。
根据这个位置把子列表删除。
要找到子列表的位置,你可以这样做:
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']