有没有更好的方法来建立这个lis

2024-04-26 18:40:53 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

创建新列表的规则如下:

  • 在JRstrt中的每个1第一次传递时,向p添加一个序列号。序列计数器从1开始表示第一个1,从2开始表示第二个1,依此类推。对于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的noob,我想对我的方法提出批评。非常感谢。你知道吗

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


Tags: 方法in内容列表forindexif规则
1条回答
网友
1楼 · 发布于 2024-04-26 18:40:53

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

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 = [next(count) if i else i for i in JRstrt]替换p = JRstrt[:]

相关问题 更多 >