Python 3.x 测试两个列表之间的连续字母
我一直在努力让这个逻辑正常工作,但简单地说,我有两个列表,包含他们自己的字符集。我应该让它在有连续字母的地方返回,虽然我自己看不到逻辑,但这是我到目前为止得到的Python 3.x 测试两个列表之间的连续字母,python-3.x,list,Python 3.x,List,我一直在努力让这个逻辑正常工作,但简单地说,我有两个列表,包含他们自己的字符集。我应该让它在有连续字母的地方返回,虽然我自己看不到逻辑,但这是我到目前为止得到的 lst1=['k','u','h','m'] lst2=['k','u','h','n'] lst3=['s','y','u','u'] lst4=['p','y','u','u'] ns1='' ns2='' ns3='' ns4='' match1=0 match2=0 for x in range(0,len(lst1)-1):
lst1=['k','u','h','m']
lst2=['k','u','h','n']
lst3=['s','y','u','u']
lst4=['p','y','u','u']
ns1=''
ns2=''
ns3=''
ns4=''
match1=0
match2=0
for x in range(0,len(lst1)-1):
ns1=ns1+lst1[x]
ns2=ns2+lst2[x]
if ns1 == ns2:
match1=match1+1
return match1
for y in range(0,len(lst3)-1):
ns3=ns3+lst3[y]
ns4=ns4+lst4[y]
if ns3 == ns4:
match2=match2+1
return match2
在第一个for循环中,预期的输出是3个匹配,因为lst1和lst2之间有3个连续的字母,与lst3和lst4相同,但它应该从第二个索引开始
实际上,这确实有效,但在lst3和lst4的情况下,它将按预期返回match1作为3,但在match2的情况下,它将返回0。通常我可以用1而不是0开始程序,但是如果是随机生成的列表。我怎样才能达到正确的结果
在有两个列表的情况下:
lstx=['a','b','c','d']
lsty=['e','b','c','f']
例如,在这个示例中,预期输出应该是2,因为b和c在lstx和lsty之间是连续的
无论预期输出的最小值是2,因为只有当两个或多个字母并排并位于对应列表之间的同一位置时,字母才能被归类为连续字母,在条件失败后,它们中没有重置,因此它们可以检查其他值,因为从第一个索引中携带不匹配 此外,使用
zip()
同时迭代列表更容易,而不是使用索引和range()
,应该避免使用索引和range()
,这样您的主循环就会变成这样:
for x, y in zip(lst3, lst4):
ns3 = ns3 + x
ns4 = ns4 + y
if ns3 == ns4:
match2 = match2 + 1
else:
ns3 = ''
ns4 = ''
在你的例子中,我看不到任何数字是连续的,这可以简化你的问题,在列表的同一索引中哪些字母是相同的,一个更简单的检查可以这样做
count = sum(x == y for x, y in zip(lstx, lsty))
这里zip()用于同时对两个列表进行计算,sum()可以对false和true的值求和,这一事实用于获得条件x==y为true的次数i为了澄清您的问题,您能为您的示例提供预期的输出吗?非常感谢您的解释,这非常有帮助。我会尝试更多地练习使用这个函数,以确保我完全理解它。如果你需要澄清,我会询问任何事情,还有为什么需要连续部分?作业是一个列表检查,我有绝大多数程序,它接受一个句子作为字符串,拆分它,并在第二个句子字符串之间进行检查,每个字母都包含在各自的列表中,但作业的最后一部分是对具有类似元音的单词进行字符串比较,因此应检查顺序/连续字母是否正确