查找连续的最后一个字母:尝试循环遍历连续字母时,列表索引超出范围

2024-06-01 06:47:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在努力找出最后几个字母最连续的单词。例如,在此字符串中:

asd atsd ard afs agrs args ats

这里的输出应该是:"afs agrs args ats"

我试图通过以下循环来实现这一点:

for i in range(0,len(wordlist)):
    current_letter = wordlist[i][-1]
    next_letter == wordlist[i+1][-1]
    if current_letter = next_letter:
        longest_sequence.append(current_letter)

在此之后,我将比较最长序列的长度和current_sequence的长度,并在current_sequence更长时更新它

然而,我得到了一个list index out of range error。我确实理解这是为什么,但我不明白如何在不丢失列表的最后一个字母的情况下解决此错误(通过:range(0,len(wordlist) - 1

我现在已将代码更改为:

for i in range(0,len(wordlist) - 2):
    if wordlist[i][-1] == wordlist[i+1][-1]:
        print(wordlist[i], wordlist[i+1])

但是,当输入"tts attgs ghf ghhf loll lpl lpl wow"时,我只得到以下内容:"tts attgs ghf ghhf loll lpl lpl lpl"。所以当在连续的一对中添加第二个单词时,我似乎在有3个连续的结尾时创建了一个double。然而,我不明白为什么会发生这种情况


Tags: inforlen字母argsrangecurrent单词
2条回答

However, I am getting a list index out of range error. I do understand why this is, but i do not understand how i can solve this error without loosing the last letter of my list (throug: range(0,len(wordlist) - 1)

实际上,您可以使用range(0,len(wordlist-1)),并且不会丢失最后一个字母next_letter将是最后一封信

这里有很多错误。首先,您的i范围包括最后一个单词的索引,但随后执行wordlist[i+1],这将在范围的最后一次迭代中超出范围

next_letter == wordlist[i+1][-1]是比较,而不是赋值

if current_letter = next_letter:是赋值,而不是比较

如果这是一个比较,如果它是False,那么您不想采取一些行动,比如对longest_sequence中的内容做些什么,然后在继续之前清除它吗

下面是对所有这些的一种总结,通过修复代码中的问题,并指出您需要一些附加逻辑的地方:

for i in range(0, len(wordlist) - 1):
    current_letter = wordlist[i][-1]
    next_letter = wordlist[i + 1][-1]
    if current_letter == next_letter:
        longest_sequence.append(current_letter)
    else:
        pass # Do something here with what you've accumulated in longest_sequence

相关问题 更多 >