是否有一种优雅的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)
以下显式检查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以检查其他条件.
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)