亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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

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

PIPIONE 2023-09-26 16:09:47
我想將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 retprint('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]
查看完整描述

6 回答

?
慕雪6442864

TA貢獻1812條經驗 獲得超5個贊

在 Python 3.8 或更高版本中,您可以使用賦值運算符來執行此操作:


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


查看完整回答
反對 回復 2023-09-26
?
紅顏莎娜

TA貢獻1842條經驗 獲得超13個贊

您可以利用可變列表


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]


查看完整回答
反對 回復 2023-09-26
?
慕勒3428872

TA貢獻1848條經驗 獲得超6個贊

您可以使用該函數accumulate()和運算符or:


from itertools import accumulate


list(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。


查看完整回答
反對 回復 2023-09-26
?
浮云間

TA貢獻1829條經驗 獲得超4個贊

類似于我們一位朋友的解決方案。為了可讀性稍作修改。使用 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。所以執行程序時沒有錯誤...


反饋總是值得贊賞..:)


查看完整回答
反對 回復 2023-09-26
?
湖上湖

TA貢獻2003條經驗 獲得超2個贊

有什么方法可以在一行中完成此操作嗎?即列表理解、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 ls


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



查看完整回答
反對 回復 2023-09-26
?
守著一只汪

TA貢獻1872條經驗 獲得超4個贊

for i in range(len(ls)):

   if ls[i] is None:

     ls[i] = ls[i-1]

如果它是 None,則將其設置為前一個變量。


查看完整回答
反對 回復 2023-09-26
  • 6 回答
  • 0 關注
  • 232 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號