【发布时间】:2021-10-01 23:43:25
【问题描述】:
基本上,代码要求我将所有零移到列表末尾。到目前为止,这是我的代码:
def moveZerosToEnd(l):
for i in l:
#look for zeros
if int(i) == 0:
j = nz(l,i)
#swap zero with nonzero
l[i], l[j] = l[j], l[i]
return l
def nz(l,i):
#look for nonzero
while i < len(l) and l[i] == 0:
#progress if zero
i += 1
#return nonzero value
return i
l = []
for i in range(5): l.append(int(input()))
moveZerosToEnd(l)
print(l)
但是,每当我输入五个数字时,它只会导致相同的列表保持不变。我想知道我在这里做错了什么以及如何解决它。
【问题讨论】:
-
函数返回其工作的结果。您需要将函数的结果分配给一个新名称,并查看该变量。
-
@kwinkunks 不,他们不需要这样做。该函数更改传入的相同列表并返回它。程序中只有一个列表。
-
我认为
nz(l,i)期望i成为列表中的索引;但是当您从moveZerosToEnd调用它时,您实际上是从列表中传递了一个 value。 -
sorted(my_list,key=lambda x:x==0)我认为会这样做 -
这里的问题是
i是列表中的一个元素,而不是列表中某个元素的索引,这是您的交换所期望的。您需要使用enumerate来完成这项工作。
标签: python arrays list swap zero