python字符串是单一字符的无序组合对吗,python – 组合两个字符串列表

如果我们假设你的两个列表都是有序的,并且它们每个都只缺少整个集合中的一些元素,那么我可以看到一个应该在大多数情况下都能工作的算法.

>在A中取下一个索引.

>逐步寻找比赛:

>如果匹配:

>从B的开头删除所有内容,包括B中的匹配,并添加到C

>如果没有匹配:

>将索引A添加到C.

>重复

>如果B中还有任何内容,请将其添加到C.

这是算法的python代码:

a1 = ['Second', 'Third', 'Fourth']

b1 = ['First', 'Second', 'Third']

a2 = ['First', 'Third', 'Fourth']

b2 = ['First', 'Second', 'Third']

a3 = ['First', 'Third', 'Fourth']

b3 = ['First', 'Second', 'Fourth']

def merge(a, b):

c = []

b_oldindex = 0

for a_index in range(len(a)):

match = False

for b_index in range(b_oldindex, len(b)):

if a[a_index] == b[b_index]:

c.extend(b[b_oldindex:b_index+1])

b_oldindex = b_index + 1

match = True

break

if not match:

c.append(a[a_index])

if b_oldindex < len(b):

c.extend(b[b_oldindex:])

return c

print(merge(a1,b1))

print(merge(a2,b2))

print(merge(a3,b3))

print(merge(b1,a1))

print(merge(b2,a2))

print(merge(b3,a3))

其中产生以下输出:

['First', 'Second', 'Third', 'Fourth']

['First', 'Second', 'Third', 'Fourth']

['First', 'Third', 'Second', 'Fourth']

['First', 'Second', 'Third', 'Fourth']

['First', 'Second', 'Third', 'Fourth']

['First', 'Second', 'Third', 'Fourth']

在所有测试用例中,唯一未能产生正确顺序的是merge(a3,b3).

完全解决问题可能涉及实现正确的合并算法(如合并排序中所使用的),这需要能够评估元素应该处于的顺序.您可以在Rosetta代码中看到python implementation of merge sort.

更新:

鉴于这实际上是对一组书中的分期付款进行排序,您可以通过考虑其他信息来避免在第三组数据中描述的情况.即,按照版权或出版日期的相反顺序使用列表上的合并功能.

例如,在您的情况下:

a3 = ['First', 'Third', 'Fourth'] # Second novel

b3 = ['First', 'Second', 'Fourth'] # Third novel

a3的书将在b3的书之前出版.如果您可以收集这种元数据,那么您可以避免此问题.

版权日期在同一本书的不同版本之间不会有所不同,但发布日期可能会有所不同.因此,我会在发布日期之前查看版权日期.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值