python - 如何用以前的值替换列表中的无

标签 python python-3.x list-comprehension

我想用前面的变量(对于所有连续的无)替换 None 中的 list。我用 iffor(多行)做到了。有没有办法在一行中做到这一点?即列表推导式、Lambda 和/或映射
我的想法是使用列表理解,但我无法在列表理解中分配变量来设置以前的值。
我的项目中有一个类似的场景以这种方式处理 None,问题是我不想为小功能编写 10 行代码。

def none_replace(ls):
    ret = []
    prev_val = None
    for i in ls:
        if i:
            prev_val = i
            ret.append(i)
        else:
            ret.append(prev_val)
    return ret

print('Replaced None List:', none_replace([None, None, 1, 2, None, None, 3, 4, None, 5, None, None]))
输出:Replaced None List: [None, None, 1, 2, 2, 2, 3, 4, 4, 5, 5, 5]

最佳答案

在 Python 3.8 或更高版本中,您可以使用 assignment operator 执行此操作:

def none_replace(ls):
    p = None
    return [p:=e if e is not None else p for e in ls]

关于python - 如何用以前的值替换列表中的无,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64132044/

相关文章:

python - while之后这个函数还在执行吗?

python - 从脚本访问 S3 存储桶,无需重新配置 AWS CLI

python - 如何计算列表中 `None` 的出现次数?

list - Erlang 列表理解奇怪的行为

python - 在 Python 中格式化或简化长 bool 表达式?

python - 具有日期范围的条形图在绘图中剪切条形图

python - Collat​​z 环结构

python-3.x - 为什么(模块未找到错误 : No module named 'scapy' ) shows up?

Python - "Joining"不同类型列表列表

python - 为什么 python 子进程 zip 失败但在 shell 上运行有效?