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

标签 python list recursion

使用 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']

更新:

为了使问题更加清晰,该列表实际上是日志文件中一组字符串的 grep 输出。这组字符串可能会重复,我只想要最后一组。

最佳答案

递归不会使这变得更简单,它会使它变得更复杂。

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

对我来说,这似乎是最简单有效的方法。您只需从列表末尾迭代到 'item3',因为 reversed 返回一个迭代器。

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

i = list(reversed(items)).index('item3')
items_of_interest = items[-i-1:]

这就更简单了。如果 '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()

关于Python递归向后打印列表中的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7425297/

相关文章:

arrays - 什么是最好的 VBA 数据类型`key`= >`value` 来保存与 PHP 数组相同的数据

java - 用链表反转字符串方法

python - 二维数组代表一个巨大的 python 字典,COOrdinate 类似解决方案以节省内存

python - Django:如何将上下文提供给 FormView get() 方法(也使用请求参数)

python - 如何在 python 中绘制时间间隔数据?

java - 使用 Java Streams 从 Nested List 和 Outer List 收集数据

c - 我创建了一个整数数组,系统提示用户选择 2 个数字,我试图从这 2 个数字返回斐波那契序列

C# 二进制搜索树给出不正确的多数元素

php - 递归 MySQL 查询?

python - 优化python编码功能