小编Par*_*jan的帖子

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

我想用之前的变量(对于所有连续的无)替换Nonein 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]))
Run Code Online (Sandbox Code Playgroud)

输出:

Replaced None List: [None, None, 1, 2, 2, 2, 3, 4, 4, 5, 5, 5]

python list-comprehension python-3.x

13
推荐指数
3
解决办法
3189
查看次数

SIGINT 在 python 中本质上是不可靠的吗?

我有一个依赖于SIGINT正常关闭的应用程序。我注意到它每隔一段时间就会继续运行。原因原来是xml/etree/ElementTree.py.

如果SIGINT在清理生成器时到达,则忽略所有异常(回想一下 的默认操作SIGINT是引发 KeyboardInterrupt)。这不是这个特定生成器或一般生成器所独有的。

从 python 文档:

“由于__del__()调用方法的不稳定环境,在执行过程中发生的异常将被忽略,而是向 sys.stderr 打印警告”

在超过五年的 Python 编程中,这是我第一次遇到这个问题。

如果垃圾收集可以在任何时候发生,那么SIGINT理论上也可以在任何时候被忽略,我永远不能依赖它。那是对的吗?我一直很幸运吗?

或者是关于这个特定的包和这个特定的生成器?

python garbage-collection generator sigint keyboardinterrupt

5
推荐指数
0
解决办法
53
查看次数