跳过列表中的元素

时间:2016-11-30 05:33:59

标签: python python-2.7

请你帮我解决这个问题吗?我有一个像这样的数组

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]

感谢您的时间。

1 个答案:

答案 0 :(得分:2)

  • 定义一个辅助集来测试元素是否已被使用
  • 特殊情况:如果为0,则传递
  • 扫描原始列表,并增加1直到不在辅助设置
  • 将新值添加到集合
  • 附加到输出列表

(这里没有列表理解,因为有副作用)

我的建议:

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)