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

ust*_*etz 12 python indexing list

给出一个清单 l1 = ['apple', 'pear', 'grapes, 'banana']

我怎样才能删除所有项目 'pear'

Viv*_*ble 16

使用列表切片方法

>>> l1 = ['apple', 'pear', 'grapes', 'banana']
>>> target_ibdex = l1.index('pear')
>>> target_ibdex
1
>>> l1[:target_ibdex+1]
['apple', 'pear']
>>> 
Run Code Online (Sandbox Code Playgroud)

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

>>> 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']
Run Code Online (Sandbox Code Playgroud)

当元素出现在列表中时

>>> 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']
Run Code Online (Sandbox Code Playgroud)


Jon*_*nts 7

您可以构建一个自定义生成器函数,它可以在任何可迭代的列表上工作,而不仅仅是列表 - 尽管对于您的示例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']
Run Code Online (Sandbox Code Playgroud)


Hub*_*iak 5

l1 = ['apple', 'pear', 'grapes', 'banana']
if "pear" in l1:
    l2 = l1[:l1.index("pear")+1]
    print l2
Run Code Online (Sandbox Code Playgroud)

输出:

['apple','梨']