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

我想将None中的替换list为之前的变量(对于所有连续的 None )。if我用and for(多行)做到了。有什么方法可以在一行中完成此操作吗?即列表理解、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]


PIPIONE
浏览 170回答 6
6回答

慕雪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,则将其设置为前一个变量。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python