所以我已经编写了一些代码来在第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])
我错过了此代码中的重大错误吗?是否有一些我不知道的语法要求?
答案 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