【问题标题】:Move all zeroes to the end of a list将所有零移动到列表的末尾
【发布时间】: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


【解决方案1】:

试试这个自制的例子。

  • 检索列表中非“0”的所有元素并从中创建一个新列表
  • 将每次出现的“0”扩展到这个新列表中
    your_list = [5,4,3,2,1,0,0,0,-1,-2]
    new_list = [i for i in your_list if i != 0]
    new_list.extend([0]*your_list.count(0))
    

    输出

    [5, 4, 3, 2, 1, -1, -2, 0, 0, 0]
    
  • 【讨论】:

    • [[0]*your_list.count(0)][0] 可以是[0]*your_list.count(0)
    • 是的,确实如此。不得不在最后索引列表有点奇怪。感谢您的建议。
    【解决方案2】:

    你也可以使用 remove() 和 append()

    def moveZerosToEnd(l):
        for i in l:
        #look for zeros
            if(i == 0):
                l.remove(i)
                l.append(i)
        return l
    
    l = []
    for i in range(5): l.append(int(input("What is the number: ")))
    moveZerosToEnd(l)
    print(l)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-17
      • 1970-01-01
      • 2016-06-16
      相关资源
      最近更新 更多