完整的链条?未处理Python迭代
所以我写了一些代码,将整数从第零位堆叠到一个列表中。由于某种原因,我无法破译,下面的while循环没有被处理。我已经遵循了我所知道的所有好的样式和语法要求,while循环在自己运行时可以工作完整的链条?未处理Python迭代,python,python-2.7,while-loop,iteration,Python,Python 2.7,While Loop,Iteration,所以我写了一些代码,将整数从第零位堆叠到一个列表中。由于某种原因,我无法破译,下面的while循环没有被处理。我已经遵循了我所知道的所有好的样式和语法要求,while循环在自己运行时可以工作 def row(line): """ Function that merges a single row or column. """ result_length = len(line) print result_length # Create a list
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])
def行(行):
"""
合并单个行或列的函数。
"""
结果长度=长度(直线)
打印结果长度
#创建一个与'line'参数长度相同的零列表
pts_alloc=0
虚拟=0
结果=行
结果[0:][pts_alloc用于范围内的假人(len(结果))]
打印结果
#迭代“行”列表,查找非零项,然后
#从“结果[0]”堆栈它们
行计数=0
结果_位置=0
而(第0行):
结果[结果位置]=行[行计数]
打印结果
结果_位置+=1
行计数+=1
返回结果
打印行([4,0,0,5])
这段代码中是否有我遗漏的重大错误?是否有一些我不知道的语法要求?问题似乎在于这一部分:
result = line
result[0:] = [pts_alloc for dummy in range(len(result))]
通过用result=line
替换result
的一个片段,您也在替换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
问题似乎在于这一部分:
result = line
result[0:] = [pts_alloc for dummy in range(len(result))]
通过用result=line
替换result
的一个片段,您也在替换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
result=line;结果[0::=
在这里,您正在修改行
!这是怎么回事?是否要将所有非零项移到前面?是否要写入result=line[0:];结果=
?结果=行;结果[0::=
在这里,您正在修改行
!这是怎么回事?是否要将所有非零项移到前面?是否要写入result=line[0:];结果=
?这是一个很好的例子,说明了为什么“直观”方法并不总是正确的方法。我知道在算法上移动零可能会更安全或者更迂腐,但是没有理由这样做。零是零,不证明什么,所以最好把它们扔掉,在末尾插入“新”的。这是一个很好的例子,说明为什么“直觉”方法并不总是正确的方法。我知道在算法上移动零可能会更安全或者更迂腐,但是没有理由这样做。零是零不证明什么,所以最好把它们扔掉,在末尾插入“新”的