-
慕雪6442864
在 Python 3.8 或更高版本中,您可以使用赋值运算符来执行此操作:def none_replace(ls):
p = None
return [p:=e if e is not None else p for e in ls]
-
红颜莎娜
您可以利用可变列表x =[None, None, 1, 2, None, None, 3, 4, None, 5, None, None]for i,e in enumerate(x[:-1], 1): if x[i] is None: x[i] = x[i-1]print(x)输出[None, None, 1, 2, 2, 2, 3, 4, 4, 5, 5, 5]
-
慕勒3428872
您可以使用该函数accumulate()和运算符or:from itertools import accumulatelist(accumulate(lst, lambda x, y: y or x))# [None, None, 1, 2, 2, 2, 3, 4, 4, 5, 5, 5]在此解决方案中,您获取该元素y和前一个元素x,并使用运算符对它们进行比较or。如果y是None则取前一个元素x;否则,你就拿y。如果两者都是None你得到的None。
-
浮云间
类似于我们一位朋友的解决方案。为了可读性稍作修改。使用 range(len()) 代替枚举x =[None, None, 1, 2, None, None, 3, 4, None, 5, None, None]for i in range(len(x)): if x[i] is None: x[i] = x[i-1]print(x) 输出: [None, None, 1, 2, 2, 2, 3, 4, 4, 5, 5, 5]为第一个值 x[-1] 赋值None。所以执行程序时没有错误...反馈总是值得赞赏..:)
-
湖上湖
有什么方法可以在一行中完成此操作吗?即列表理解、Lambda 和/或映射我不这么认为,因为绑定关闭很晚。此外,它可能不可读。我的项目中有一个类似的场景以这种方式处理 None ,问题是我不想为小功能编写 10 行代码。为什么你觉得它很小?问题就是需要解决的问题。一个小函数听起来是解决这个问题的一个不错的选择。我的解决方法:def none_replace(ls: list): prev, this = ls[0], None assert prev is not None, "First arg can't be None" for i in range(1, len(ls)): this = ls[i] if this is None: ls[i] = prev prev = this or ls[i] return lsprint('Replaced None List:', none_replace(['asd', None, None, 1, 2, None, None, 3, 4, None, 5, None, None]))
-
守着一只汪
for i in range(len(ls)): if ls[i] is None: ls[i] = ls[i-1]如果它是 None,则将其设置为前一个变量。