Python 转换列表中随机分布的某些数字,同时保留其他数字

Python 转换列表中随机分布的某些数字,同时保留其他数字,python,Python,我一直在尝试将所有的1转换为0,前提是它们的前面或后面都是0。2s和4s在序列中充当中断,未连接到0的1s应保持1s。清单y是我想要的 z=[2,1,2,0,1,1,1,2,1,1,2,1,1,1,0,2,0,1,4,1,0,0,1,1,2,0] y=[2,1,2,0,0,0,0,2,1,1,2,0,0,0,0,2,0,0,4,0,0,0,0,0,2,0] 我只能将所有1设置为0,包括未连接到0的1 for a in range(len(z)): if a==0: s

我一直在尝试将所有的1转换为0,前提是它们的前面或后面都是0。2s和4s在序列中充当中断,未连接到0的1s应保持1s。清单y是我想要的

z=[2,1,2,0,1,1,1,2,1,1,2,1,1,1,0,2,0,1,4,1,0,0,1,1,2,0]
y=[2,1,2,0,0,0,0,2,1,1,2,0,0,0,0,2,0,0,4,0,0,0,0,0,2,0]
我只能将所有1设置为0,包括未连接到0的1

for a in range(len(z)):
    if a==0: 
        startindex=0
    elif a==(len(z)-1):
        ctr+=1
        for i in range(startindex,(len(z))):
            if z[i]==1:
                f=1
                y.append(f)
            else:
                f=z[i]
                y.append(f)
    else:
        for i in range(startindex,a):
            if z[i]==0:
                f=0
                y.append(f)
            elif z[i]==1: 
                f=0
                y.append(f)
            else:
                f=z[i]
                ctr+=1
                y.append(f)
        startindex=a
谢谢。

一种方法是使用。其思想是,如果在0和1的序列中存在任何零,所有值都将变为0,其他值保持不变:

from itertools import groupby

z = [2,1,2,0,1,1,1,2,1,1,2,1,1,1,0,2,0,1,4,1,0,0,1,1,2,0]

out = []
for zero_or_one, group in groupby(z, lambda x: x in {0, 1}):
    values = list(group)
    if zero_or_one:
        if any(x==0 for x in values):
            values = [0]*len(values)
    out.extend(values)


print(out)
# [2, 1, 2, 0, 0, 0, 0, 2, 1, 1, 2, 0, 0, 0, 0, 2, 0, 0, 4, 0, 0, 0, 0, 0, 2, 0]

y=[2,1,2,0,0,0,0,2,1,1,2,0,0,0,0,2,0,0,4,0,0,0,0,0,2,0]
assert out == y  # this is the expected output

欢迎来到StackOverflow。请按照您创建此帐户时的建议,阅读并遵循帮助文档中的发布指南。适用于这里。在您发布MCVE代码并准确描述问题之前,我们无法有效地帮助您。我们应该能够将您发布的代码粘贴到文本文件中,并重现您描述的问题。我已尝试修复您的缩进,但您仍然有一些未定义的变量。单字母变量名和无注释会使您的预期逻辑不清楚。请让我们方便地帮助你。谢谢,我会努力的。我编写的代码基本上只是将所有的1转换为0,我无法仅转换附加到0的1。