python - 如何删除列表中满足 python 特定条件的最左边/最右边的元素?

标签 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]

最佳答案

def filterRow(row):
    while row[-1] == "":
        row.pop()

如果您出于某种原因不想就地执行此操作,请改为这样做:

def filterRow(row):
    row = list(row)
    while row[-1] == "":
        row.pop()
    return row

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

为了使该函数更加直观,为什么不将其称为 rstrip 而不是 filterRow,因为它与 str.rstrip 的功能几乎相同code> 对字符串有影响吗?

关于python - 如何删除列表中满足 python 特定条件的最左边/最右边的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16120135/

相关文章:

python - 添加分数类 python

python - 为什么 list_blobs 也返回虚拟目录?

python - 初始化一个空的 DataFrame 并 append 行

python - mxnet(胶子): cpu used when gpu(0) context selected

python - 如何在 matplotlib 中获得更小的 latex 括号?

Python 3 可执行文件作为 Windows 服务

python - 将参数传递给 fixture 函数

python - PC 通过 TCP/IP 套接字连接到树莓派

python - 用于部署 Python 应用程序的跨平台 gui 工具包

python - Shutil.copytree 的问题