我有基本清单
['hello', 'how', 'you', 'doing', 'today']
我想将其他列表与它进行比较。
如果像这样列出
['one', 'two', 'three', 'hello', 'how', 'you', 'doing', 'today']
算法应该返回
['hello', 'how', 'you', 'doing', 'today']
实际上只是在给定的列表中找到基本列表
也给出列表可以是这样的
['one', 'two', 'three', 'how', 'you', 'doing', 'today']
因此,正如我们在此示例中看到的,缺少单词hello,因此第一个匹配项位于基本列表的位置 1。在这种情况下,返回列表应该是这样的
['*', 'how', 'you', 'doing', 'today']
第一次匹配后会怎样并不重要
所以再次示例 1
basic = ['hello', 'how', 'you', 'doing', 'today']
given = ['one', 'two', 'three', 'hello', 'how', 'you', 'doing', 'today']
output = ['hello', 'how', 'you', 'doing', 'today']
示例 2
basic = ['hello', 'how', 'you', 'doing', 'today']
given = ['how', 'you', 'doing', 'man']
output = ['*', 'how', 'you', 'doing', 'man']
示例 3
basic = ['hello', 'how', 'you', 'doing', 'today']
given = ['one', 'two', 'you', 'doing', 'man', 'yeaaaap']
output = ['*', '*', 'you', 'doing', 'man', 'yeaaaap']
我的功能看起来像这样
def findFirstMatch(basic, given):
for index, item in enumerate(basic):
for i, el in enumerate(given):
if basic[index].lower() == given[i].lower():
return given[i:]
所以现在我在这里它只是在第一次匹配之前删除元素。如果第一次匹配在 1 个位置,它可以正常工作,但在示例 2 中它无法正常工作。
我无法理解这个问题:我假设您想要实现的是以下算法:
def match(basic, given):
out = []
# 1. go through list 'basic'
# until you find the item in 'given'
# append '*' to the output list for item you
# do not find
first_match = None
for item in basic:
if not item in given:
out.append("*")
else:
first_match = item
break
if not first_match:
return out
# 2. now that we have found a match,
# simply append the rest of 'given'
index = given.index(first_match)
out.extend(given[index:])
return out
测试一下:
match(['hello', 'how', 'you', 'doing', 'today'], ['one', 'two', 'three', 'hello', 'how', 'you', 'doing', 'today'])
# ['hello', 'how', 'you', 'doing', 'today']
match(['hello', 'how', 'you', 'doing', 'today'], ['how', 'you', 'doing', 'man'])
# ['*', 'how', 'you', 'doing', 'man']
match(['hello', 'how', 'you', 'doing', 'today'], ['one', 'two', 'you', 'doing', 'man', 'yeaaaap'])
# ['*', '*', 'you', 'doing', 'man', 'yeaaaap']
重现您的示例。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句