不间断的连锁店? Python迭代没有被处理

时间:2015-02-24 12:12:52

标签: python python-2.7 while-loop iteration

所以我已经编写了一些代码来在第0个位置的列表中堆叠整数。由于某种原因,我无法解密,下面的while循环没有被处理。我已经遵循了我所知道的所有良好的样式和语法要求,并且while循环在单独运行时起作用。

def row(line):
    """
    Function that merges a single row or column.
    """
    result_length = len(line)
    print result_length

    # Create a list of zeros the same length as the 'line' argument
    pts_alloc = 0
    dummy = 0
    result = line
    result[0:] = [pts_alloc for dummy in range(len(result))]
    print result

    #Iterate over the 'line' list looking for non-zero entries and 
    #stack them from 'result[0]'
    line_count = 0
    result_place = 0

    while (line_count <= (len(line)-1)):
        if (line[line_count] > 0):
            result[result_place] = line[line_count]
            print result
            result_place += 1
        line_count += 1

    return result
print row([4, 0, 0, 5])

我错过了此代码中的重大错误吗?是否有一些我不知道的语法要求?

1 个答案:

答案 0 :(得分:4)

问题似乎是这一部分:

result = line
result[0:] = [pts_alloc for dummy in range(len(result))]

通过使用result替换result = line切片,您也会替换line中的同一切片,因为result只是对同一列表的另一个引用,而不是副本。

由于切片是整个列表,无论如何,只需执行:

result = [pts_alloc for dummy in range(len(result))]

此外,您正在声明许多不必要的变量。您可以将代码缩短为:

def row(line):
    result = [0] * len(line)
    result_place = 0
    for x in line:
        if x > 0:
            result[result_place] = x
            result_place += 1
    return result

甚至这个:

def row(line):
    non_zero = [x for x in line if x > 0]               # take non-zero values
    return non_zero + [0] * (len(line) - len(non_zero)) # pad with zeros