gpt4 book ai didi

python - 更新包含多个 0 的列表

转载 作者:行者123 更新时间:2023-12-02 01:39:46 25 4
gpt4 key购买 nike

我正在尝试编写一个函数,给定一个列表,该函数将更新 0 值以包含最接近的非零值。如果零位于列表的开头,则应使用最接近的非零值来替换零值。

换句话说,以下列表:

[0、0、10、25、30、0、0、0、55、55、55、55、60、60、60、60]

应更新为:

[10、10、10、25、30、30、30、30、55、55、55、55、60、60、60、60]

这是我到目前为止编写的代码:

data = [0 , 0 , 10 , 25 , 30 , 0 , 0 , 0, 55 , 55 , 55 , 55 , 60 , 60 , 60 , 60]

index_to_update = []
for index, item in enumerate(data) :
updated_value = None
if item == 0 :
index_to_update.append(index)
else :
updated_value = item
break

for index in index_to_update :
data[index] = updated_value

updated_list = data.copy()

for index, item in enumerate(data) :
if item == 0 :
updated_list[index] = data[index - 1]

print(updated_list)

打印:

[10, 25, 30, 55, 55, 55, 60, 60, 0, 60, 60, 0, 0]

如果我使用列表 [0 , 0 , 10 , 25 , 30 , 0 , 55 , 55 , 55 , 55 , 60 , 60 , 60 , 60 ] 那么它会按预期工作:

data = [0 , 0 , 10 , 25 , 30 , 0 , 55 , 55 , 55 , 55 , 60 , 60 , 60 , 60]

index_to_update = []
for index, item in enumerate(data) :
updated_value = None
if item == 0 :
index_to_update.append(index)
else :
updated_value = item
break

for index in index_to_update :
data[index] = updated_value

updated_list = data.copy()

for index, item in enumerate(data) :
if item == 0 :
updated_list[index] = data[index - 1]

print(updated_list)

打印:

[10、10、10、25、30、30、55、55、55、55、60、60、60、60]

位置 0 和 1 处的 0 被替换为 10。位置 5 处的 0 被替换为 30。

当包含多个 0 时,我的算法就会失败:

[0 , 0 , 10 , 25 , 30 , 0 , 0 , 0, 55 , 55 , 55 , 55 , 60 , 60 , 60 , 60]

为了转换包含元素的列表,我的算法需要进行哪些修改

[0 , 0 , 10 , 25 , 30 , 0 , 0 , 0, 55 , 55 , 55 , 55 , 60 , 60 , 60 , 60]

至:

[10 , 10 , 10 , 25 , 30 , 30 , 30 , 30, 55 , 55 , 55 , 55 , 60 , 60 , 60 , 60]

最佳答案

这是我解决这个问题的方法:

lst = [0, 0, 10, 25, 30, 0, 0, 0, 55, 55, 55, 55, 60, 60, 60, 60]

fnz, lnz = None, None

for i, v in enumerate(lst):
if v != 0:
if fnz is None:
fnz = v, i
lnz = v
else:
if lnz is not None:
lst[i] = lnz
if fnz is not None and (offset := fnz[1]) > 0:
lst[:offset] = [fnz[0]] * offset
print(lst)

输出:

[10, 10, 10, 25, 30, 30, 30, 30, 55, 55, 55, 55, 60, 60, 60, 60]

关于python - 更新包含多个 0 的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71807282/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com