Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何更改列表中数字的位置,python_Python_List_Numbers - Fatal编程技术网

如何更改列表中数字的位置,python

如何更改列表中数字的位置,python,python,list,numbers,Python,List,Numbers,我有一个列表,例如[1,3,0,2,6,0,7] 如果有“0”,我必须把它放在列表的末尾,而不改变其他数字的位置。 应返回-[1,3,2,6,7,0,0] 提前感谢!:) 肯定是一种更简单的方法,但我想到了以下几点: l = [1, 3, 0, 2, 6, 0, 7] le = len(l) l = [x for x in l if x !=0] for i in range(0,le-len(l)): l.append(0) 输出: [1, 3, 2, 6, 7, 0, 0] 只需

我有一个列表,例如[1,3,0,2,6,0,7] 如果有“0”,我必须把它放在列表的末尾,而不改变其他数字的位置。 应返回-[1,3,2,6,7,0,0]


提前感谢!:)

肯定是一种更简单的方法,但我想到了以下几点:

l = [1, 3, 0, 2, 6, 0, 7]
le = len(l)
l = [x for x in l if x !=0]
for i in range(0,le-len(l)):
    l.append(0)
输出:

[1, 3, 2, 6, 7, 0, 0]
只需按零排序:

>>> a = [1, 3, 0, 2, 6, 0, 7]
>>> a.sort(key=bool, reverse=True)
>>> a
[1, 3, 2, 6, 7, 0, 0]

这是另一种不同于目前答案的方法。无论是0还是需要相同操作的另一个数字(只要用
过滤器
功能中所需的数字替换0),这都会起作用

输出:

[1, 3, 2, 6, 7, 0, 0]

这是一个基本的编程练习,让我们用最基本的Python构造来实现它。一个简单的算法是跟踪一个索引,在该索引中检测到第一个零,并将非零数字与该位置交换,然后向前移动。这将在整个列表中携带零,直到所有的零在最后聚集在一起

numbers   = [1, 3, 0, 2, 6, 0, 7]

firstZero = -1                           # track position of first zero
for index,number in enumerate(numbers):  # go through numbers in list
    if firstZero < 0:                    
        if number == 0:                  # do nothing until a zero is found
            firstZero = index            # start tracking first zero position
    elif number != 0:
        numbers[firstZero] = number      # swap non-zero numbers
        numbers[index]     = 0           # with zero position
        firstZero         += 1           # and advance first zero position

print(numbers)
# [1, 3, 2, 6, 7, 0, 0]
key参数使用函数获取要排序的键(与数字本身相反)。这里的函数是
notn
,当应用于整数时,如果它为零,则返回True;如果不是,则返回False。这将通过以下方式将排序键与数字匹配:

 False, False, True, False, False, True, False
[1,     3,     0,    2,     6,     0,    7]
对布尔值进行排序时,将假值置于真值之前,Python排序的稳定性将保持相同键值项的相对顺序:

 False, False, False, False, False True, True
[1,     3,     2,     6,     7,    0,    0]
计算出的键值仅在排序过程中存在,结果只是相应排序的数字列表

虽然使用sort函数是一个很好的技巧,但在复杂度方面,它将在O(n logn)时间内执行。更专业化的基本算法能够在O(n)时间内执行的数据单次传递中完成相同的工作

在O(n)时间内将列表末尾的零分组的另一种方法是,通过将非零项列表与适当长度的零列表组合,构建一个新列表:

nonZero = [*filter(bool,numbers)]
numbers = nonZero + [0]*(len(numbers)-len(nonZero))

然后使用列表理解和从过滤器迭代器中解包结果来构建
nonZero
list。第二部分是重复一个列表,其中0表示达到原始长度所需的次数。

如果您在自己解决此问题时遇到了具体问题,可以在此处询问。到目前为止,您做了哪些尝试?看,欢迎来到这个网站!我建议您尝试让我们知道您迄今为止尝试了什么,以及为什么它不起作用。
numbers.sort(numbers,key=lambda n:not n)
 False, False, True, False, False, True, False
[1,     3,     0,    2,     6,     0,    7]
 False, False, False, False, False True, True
[1,     3,     2,     6,     7,    0,    0]
nonZero = [*filter(bool,numbers)]
numbers = nonZero + [0]*(len(numbers)-len(nonZero))