Python 转换列表中随机分布的某些数字,同时保留其他数字
我一直在尝试将所有的1转换为0,前提是它们的前面或后面都是0。2s和4s在序列中充当中断,未连接到0的1s应保持1s。清单y是我想要的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
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。