如何基于任意值截断列表?

时间:2019-11-18 22:42:51

标签: python python-3.x

我想整理所有尾随a值的列表,其中a是任意值。

示例:

  • [1, 2, 3, a, 5, a, a, a, a][1, 2, 3, a, 5]

另一个例子。说a = None

  • [1, None, 2, None, 3, None, None, None, 7, None, None, None, None, None, None]
    [1, None, 2, None, 3, None, None, None, 7]

filter会删除它们,但也会删除它们之间的内容。我想要一种维持顺序,保留中间元素并仅删除尾随元素的方法。

2 个答案:

答案 0 :(得分:3)

最简单的解决方案是使用pop,该操作将删除列表末尾的元素。此解决方案是就地的,这意味着它将更改输入列表的内容。

def remove_trailing(lst, val=None):
    while lst and lst[-1] == val:
        lst.pop()

用法:

>>> lst = [1, 2, 3, None, 5, None, None, None, None]
>>> remove_trailing(lst)
>>> lst
[1, 2, 3, None, 5]

答案 1 :(得分:1)

假设您的列表是[1, 2, 3, -1, 5, -1, -1, -1, -1],其中-1是任意值。

list = [1, 2, 3, -1, 5, -1, -1, -1, -1]
i = len(list) - 1
while i >= 0 and list[i] == -1:
    i = i-1
print(list[:i+1])

上面的代码将删除最后连续出现的所有任意值。希望对您有帮助!