Python 检查字符串列表是否包含字符串序列
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
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)];嗯,奇怪,我不知道我在那里做了什么;),现在好像可以工作了,谢谢!