python 更换表格序列名_如何在Python中替换列表中的所有子序列实例?

为了提高效率,您可以在列表中搜索子列表时使用

Boyer–Moore string search algorithm

def match(pattern, list):

matches = []

m = len(list)

n = len(pattern)

rightMostIndexes = preprocessForBadCharacterShift(pattern)

alignedAt = 0

while alignedAt + (n - 1) < m:

for indexInPattern in xrange(n-1, -1, -1):

indexInlist = alignedAt + indexInPattern

x = list[indexInlist]

y = pattern[indexInPattern]

if indexInlist >= m:

break

if x != y:

r = rightMostIndexes.get(x)

if x not in rightMostIndexes:

alignedAt = indexInlist + 1

else:

shift = indexInlist - (alignedAt + r)

alignedAt += (shift > 0 and shift or alignedAt + 1)

break

elif indexInPattern == 0:

matches.append(alignedAt)

alignedAt += 1

return matches

def preprocessForBadCharacterShift(pattern):

map = { }

for i in xrange(len(pattern)-1, -1, -1):

c = pattern[i]

if c not in map:

map[c] = i

return map

if __name__ == "__main__":

matches = match("ana", "bananas")

for integer in matches:

print "Match at:", integer

print (matches == [1, 3] and "OK" or "Failed")

matches = match([1, 2, 3], [0, 1, 2,3 , 4, 5, 6])

for integer in matches:

print "list Match at:", integer

print (matches)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值