繁体   English   中英

有没有更好的方法来建立此列表

[英]Is there a better way to build this list

我需要根据现有列表JRstrt的内容生成一个新列表p。 现有列表为:

JRstrt = [1,1,0,0,1,0,1,1]

创建新列表的规则是:

  • 在第一遍中,JRstrt中的每个1都在p上添加了一个序列号。 序列计数器从第一个1的1开始,第二个1的2开始,依此类推。 对于JRstrt中的每个0,p都将附加一个0。
  • 在第二遍中,JRstrt中的每个0继续使用现有计数器向新列表中添加顺序号。

这是我当前的代码:

p = []
count = 1
for ind in JRstrt:
    if ind == 1:
        p.append(count)
        count += 1
    else:
        p.append(0)


for index, object in enumerate(p):
    if p[index] == 0:
        p[index] = count
        count += 1
    else:
        pass

print p

这种方法给了我所需的结果,但是,我认为这有点笨拙。 作为Python的新手,我想批评一下我的方法。 提前谢谢了。

预期输出[1、2、6、7、3、8、4、5]

这应该与您的代码执行相同的操作:

In [42]: count = itertools.count(1)

In [43]: p = JRstrt[:]

In [44]: for i,num in enumerate(p):
   ....:     p[i] = next(count) if num==1 else num
   ....:     

In [45]: for i,num in enumerate(p):
    p[i] = next(count) if num==0 else num
   ....:     

In [46]: p
Out[46]: [1, 2, 6, 7, 3, 8, 4, 5]

进一步优化:

p = JRstrt[:]替换为p = [next(count) if i else i for i in JRstrt]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM