请你帮我解决这个问题吗?我有一个像这样的数组
a = [1,2,3,0,0,0,3,4,5]
我希望输出为
a = [1,2,3,0,0,0,4,5,6]
或a = [1,2,3,0,3,4,5] -> a = [1,2,3,0,4,5,6]
所以,我知道如何检测重复并增加列表中的数字。但我的问题是如何检测0并在我的迭代中通过列表“跳过”它?感谢任何帮助(Python 2.7是理想的,因为我们使用2.7)
到目前为止,我的方式是i = 1
while i < len(a):
if a[i-1] == a[i]:
a[i] = a[i]+1
i = i+1
并且,显然它只适用于a = [1,2,3,3,4,5]
感谢您的时间。
答案 0 :(得分:2)
(这里没有列表理解,因为有副作用)
我的建议:
a = [1,2,3,0,0,0,3,4,5]
b = []
s = set()
for i in a:
if i:
while i in s:
i+=1
s.add(i)
b.append(i)
注意:根据数据,set
可能过度。如果只有数据部分增加(零除外),1个内存插槽就足够了:
a = [1,2,3,0,0,0,3,4,5]
b = []
highest = 0
for i in a:
if i!=0:
if i <= highest:
i=highest+1
highest = i
b.append(i)
(速度更快,因为它不会增加i
,只需取最高值+ 1)