我需要根据现有列表JRstrt的内容生成一个新列表p。现有的清单是:
JRstrt = [1,1,0,0,1,0,1,1]
创建新列表的规则是:
这是我目前的代码:
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]
答案 0 :(得分:1)
这应该与您的代码完全相同:
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]