如何删除列表中满足某个标准的最左侧/最右侧元素?

Jul*_*ian 5 python

我有一个如下所示的列表:

['a', 'b', 'c', '', '', '']

这是解析'脏'csv文件的结果.我现在想要摆脱右边的空列.我不能只使用计数,因为长度是可变的.我也不能只使用简单的过滤,因为还有一些行如下所示:

['a1', '', 'c1', '', '']

所以我必须保留正确的空列.这是否有惯用的方法?我希望能在"反向列表"中应用类似"removeWhile"的功能.

到目前为止,我提出的最好的是以下内容:

def filterRow(row):
    row.reverse()
    blanks = 0
    for x in row:
        if x == '':
            blanks += 1
        else:
            break
    row.reverse()
    return row[0:-blanks]
Run Code Online (Sandbox Code Playgroud)

Lau*_*low 9

def filterRow(row):
    while row[-1] == "":
        row.pop()
Run Code Online (Sandbox Code Playgroud)

如果你不想出于某种原因就地进行,请改为:

def filterRow(row):
    row = list(row)
    while row[-1] == "":
        row.pop()
    return row
Run Code Online (Sandbox Code Playgroud)

弹出列表末尾的速度非常快,虽然计算最后一个索引并执行切片可能会稍微快一点,但也会导致更长,更复杂和更难读取的代码.因此,暂时使用可读版本,并且只有在确定它是实践中的重大瓶颈时才考虑更改它.

为了使函数更直观,为什么不调用它rstrip而不是filterRow,因为它对str.rstrip字符串几乎完全相同?