删除Python中的尾随空元素

Dmi*_* B. 13 python list

是否有一种优雅的pythonian方法从列表中删除尾随的空元素.一种list.rstrip(无).所以

[1, 2, 3, None, 4, None, None]
Run Code Online (Sandbox Code Playgroud)

应该导致

[1, 2, 3, None, 4]
Run Code Online (Sandbox Code Playgroud)

我想这可以推广到删除任何特定值的尾随元素.


更新:我应该指定我希望将其作为单行(可读)表达式完成

ala*_*lan 20

编辑:使用pop()而不是切片列表,因为评论者已正确建议.

我不知道是否有更多的pythonic方式,但这有效:

while my_list and my_list[-1] is None:
    my_list.pop()
Run Code Online (Sandbox Code Playgroud)

编辑:正如@DSM指出的那样,如果你只想摆脱None价值,并留下零或其他假值,你可以这样做:

my_list = [1, 2, 3, None, 4, None, None]
while not my_list[-1]:
    my_list.pop()
print(my_list)
# [1, 2, 3, None, 4]
Run Code Online (Sandbox Code Playgroud)


Sim*_*ser 9

以下显式检查None元素:

while l and l[-1] is None:
    l.pop()
Run Code Online (Sandbox Code Playgroud)

它可以概括如下:

f = lambda x: x is None
while l and f(l[-1]):
    l.pop()
Run Code Online (Sandbox Code Playgroud)

您现在可以定义不同的功能f以检查其他条件.


Sco*_*ter 5

def remove_trailing(l, remove_value=None):
    i = len(l)
    while i > 0 and l[i - 1] == remove_value:
        i -= 1
    return l[:i]
Run Code Online (Sandbox Code Playgroud)