从列表末尾过滤元素

use*_*853 4 python list filter

我有一个如下所示的数据结构:

[(1, 2), (2, 3), (4, 0), (5, 10), (6, 0), (7, 0)]
Run Code Online (Sandbox Code Playgroud)

在第二个元素为0的列表末尾仅过滤掉元组的最佳方法是什么?

所需的输出是:

[(1, 2), (2, 3), (4, 0), (5, 10)]
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 8

这听起来像你想要一个' rstrip()for lists'.您可以使用.pop()while循环:

while somelist and somelist[-1][1] == 0:
    somelist.pop()
Run Code Online (Sandbox Code Playgroud)

这改变了列表到位.

要创建副本,您必须首先找到切片端点,然后切片到该点以进行快速复制:

end = len(somelist)
while end and somelist[end - 1][1] == 0:
    end -= 1
newlist = somelist[:end]
Run Code Online (Sandbox Code Playgroud)