使用Python中的列表理解将所有零移动到数组末尾
给定一个随机数数组,将给定数组的所有零推到数组末尾。例如,如果给定的数组是 {1, 9, 8, 4, 0, 0, 2, 7, 0, 6, 0},则应将其更改为 {1, 9, 8, 4, 2, 7, 6、0、0、0、0}。所有其他元素的顺序应该相同。预期时间复杂度为 O(n),额外空间为 O(1)。
例子:
Input : arr = [1, 2, 0, 4, 3, 0, 5, 0]
Output : arr = [1, 2, 4, 3, 5, 0, 0, 0]
Input : arr = [1, 2, 0, 0, 0, 3, 6]
Output : arr = [1, 2, 3, 6, 0, 0, 0]
我们有针对此问题的现有解决方案,请参阅将所有零移到数组链接的末尾。我们将在单行代码中使用 List Comprehension 在Python中解决这个问题。
# Function to append all zeros at the end
# of array
def moveZeros(arr):
# first expression returns a list of
# all non zero elements in arr in the
# same order they were inserted into arr
# second expression returns a list of
# zeros present in arr
return [nonZero for nonZero in arr if nonZero!=0] + \
[Zero for Zero in arr if Zero==0]
# Driver function
if __name__ == "__main__":
arr = [1, 2, 0, 4, 3, 0, 5, 0]
print (moveZeros(arr))
输出:
[1, 2, 4, 3, 5, 0, 0, 0]