> 文档中心 > Python每日一练-----移动零

Python每日一练-----移动零

🌧(day35)

目录

📝题目:

🚩题目分析:

💡解题思路:

解法一:✏

🌈代码实现

解法二:✏

🌈代码实现


📝题目:

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。

⭐示例 1:

输入: nums = [0,1,0,3,12]

输出: [1,3,12,0,0]

⭐示例 2:

输入: nums = [0]

输出: [0]

🚩题目分析:

注意保持非零数的相对顺序,即因为0位置的变动其它非零数的索引都会改变。但如果原例表1的位置在2前,那么移动后1依旧要在2前。

💡解题思路:

解法一:✏

对于列表中0元素的移动到末尾,相当于将0元素删除,然后再添加到末尾。

我们可以使用remov()和appebd()方法实现这一过程。

remove()方法用于删除列表中的元素。remove(要删除的元素)

append()方法用于向列表添加的元素。append(要添加的元素)

appen()函数默认将加入的元素放在列表末尾。

🌈代码实现

def moveZeroes(nums):    for i in range(nums.count(0)): nums.remove(0) nums.append(0)    return nums

解法二:✏

使用双指针,通过交换两个指针对应的元素实现将0元素以到末尾。我们可以在列表开头放置两个指针left和right。right指针行移动。

如果遇到非0数那么我们将left指针也向前移动使得left指针和right指针重合,那么交换两个指针对应的元素就是自己和自己交换不会又任何影响。

如果遇到0元素则不移动left指针,但是right指针向前移动。那么left就会在right指针后一个位置。这时候交换两个指针对应的元素那么0元素就会和后一个非0元素互换位置实现0元素的移动。

接着重复这一过程即可。

🌈代码实现

def moveZeroes(nums):    right = 0    left = 0    while right < len(nums): if nums[right] != 0:     nums[left], nums[right] = nums[right], nums[left]     left += 1 right += 1

今天就到这,明天见。🚀

❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄end❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄