如何解决替换列表中的“无”值时如何处理边缘情况?
我希望将列表中的None值替换为先前的值,但考虑到第一个值为None或先前值为None的边缘情况;如果第一个值是None,则应保持None。因此,例如下面是人们期望的输入和输出:
[1,2,None,3,None] --> [1,3]
[None,1,3] --> [None,3]
我尝试了一些循环操作,但是不确定如何处理边缘情况:
myList = [1,None]
def replaceNone(myList):
res = []
for i in range(len(myList)):
if myList[i] is not None:
res.append(myList[i])
else:
res.append(myList[i-1])
return res
replaceNone(myList)
解决方法
我会做类似的事情
new_list = [listA[index - 1] if i == None and index>= 1 else i for index,i in enumerate(listA)]
例如:
listA = [1,2,None,3,None]
listB = [None,4]
new_list = [listA[index - 1] if i == None and index>= 1 else i for index,i in enumerate(listA)]
new_list2 = [listB[index - 1] if i == None and index>= 1 else i for index,i in enumerate(listB)]
print(new_list)
print(new_list2)
输出:
[1,3] #listA
[None,4] #listB
这似乎是理想的行为
,如果您想使用性能更快的简约代码,我想出了以下使用Pandas库的解决方案,在这种情况下可能会有用:
import pandas as pd
def replaceNone(myList):
myList = pd.DataFrame(myList)
return myList.fillna(method='ffill').values.flatten().tolist()
myList = [None,1,3]
replaceNone(myList)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。