从特定值之后的列表中删除所有元素

新手上路,请多包涵

给定一个列表 l1 = ['apple', 'pear', 'grapes, 'banana']

如何删除 'pear' 之后的所有项目

原文由 ustroetz 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 539
2 个回答

使用列表切片方法

>>> l1 = ['apple', 'pear', 'grapes', 'banana']
>>> target_ibdex = l1.index('pear')
>>> target_ibdex
1
>>> l1[:target_ibdex+1]
['apple', 'pear']
>>>


当列表中不存在元素时进行异常处理。

 >>> l1 = ['apple', 'pear', 'grapes', 'banana']
>>> target_element = "mango"
>>> try:
...     target_index = l1.index(target_element) + 1
... except ValueError, e:
...     target_index = None
...
>>> l1[:target_index]
['apple', 'pear', 'grapes', 'banana']

当列表中存在元素时

>>> l1 = ['apple', 'pear', 'grapes', 'banana']
>>> target_element = "pear"
>>> try:
...     target_index = l1.index(target_element) + 1
... except ValueError, e:
...     target_index = None
...
>>> l1[:target_index]
['apple', 'pear']

原文由 Vivek Sable 发布,翻译遵循 CC BY-SA 3.0 许可协议

您可以构建一个自定义生成器函数,它适用于任何可迭代对象,而不仅仅是列表 - 尽管对于您的示例 list.index ,异常处理和切片很好……

 def takewhile_including(iterable, value):
    for it in iterable:
        yield it
        if it == value:
            return

l1 = ['apple', 'pear', 'grapes', 'banana']
print('Until pear', list(takewhile_including(l1, 'pear')))
# Until pear ['apple', 'pear']
print('Until blah', list(takewhile_including(l1, 'blah')))
# Until blah ['apple', 'pear', 'grapes', 'banana']

原文由 Jon Clements 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题