Python递归以向后打印列表中的项目

use*_*738 2 python recursion list

使用Python,我试图向后读取列表或字符串.当找到感兴趣的项目时,我想打印从该点到列表末尾的所有项目.我可以做到这一点没有递归,它工作正常,但我觉得有一个更好的方法来做这个递归.:)

没有递归的示例:

items = ['item1', 'item2', 'item3', 'item4', 'item5']

items_of_interest = []
items.reverse()
for item in items:
    items_of_interest.append(item)
    if item == 'item3':
        break
    else:
        continue

items_of_interest.reverse()
print items_of_interest
['item3', 'item4', 'item5']
Run Code Online (Sandbox Code Playgroud)

更新:

为了增加问题的清晰度,列表实际上是日志文件中一组字符串的grep的输出.字符串集可能重复,我只想要最后一组.

agf*_*agf 5

递归不会使这更简单,它会使它更复杂.

for i, item in enumerate(reversed(items), 1):
    if item == 'item3':
        items_of_interest = items[-i:]
        break
else:
    # 'item3' wasn't found
Run Code Online (Sandbox Code Playgroud)

似乎是对我这样做最简单有效的方法.您只需从末尾迭代列表'item3',因为reversed返回迭代器.

编辑:如果您不介意遍历整个列表以创建反转版本,您可以使用:

i = list(reversed(items)).index('item3')
items_of_interest = items[-i-1:]
Run Code Online (Sandbox Code Playgroud)

这更简单.如果'item3'不在列表中,则会引发错误.我使用list(reversed())的,而不是[:]reverse()因为它是一个迭代在列表上,而不是两个.

编辑2:根据你对其他答案的评论,我的第一个版本做你想要的 - 从最后搜索项目而不迭代整个列表.问题中的版本必须迭代列表以反转它,就像我的第二个版本一样.

您原件的最低限度修改但更高效的版本将是:

items_of_interest = []
for item in reversed(items):
    items_of_interest.append(item)
    if item == 'item3':
        break
items_of_interest.reverse()
Run Code Online (Sandbox Code Playgroud)