2. 编写程序,输入一个包含若干整数的列表,输出一个新列表,新列表中奇数在前偶数在后,并且奇数之间的相对顺序不变,偶数之间的相对顺序也不变。
时间: 2023-04-16 14:03:30 浏览: 57
可以使用双指针的方法,一个指针从前往后扫描奇数,另一个指针从后往前扫描偶数,当两个指针相遇时,即完成了列表的重新排列。
具体实现如下:
1. 定义两个指针 i 和 j,分别指向列表的头和尾。
2. 循环遍历列表,当 i < j 时执行以下操作:
a. 如果 nums[i] 是偶数,nums[j] 是奇数,则交换两个数的位置。
b. 如果 nums[i] 是奇数,则 i++。
c. 如果 nums[j] 是偶数,则 j--。
3. 循环结束后,列表就被重新排列了,奇数在前偶数在后,并且奇数之间的相对顺序不变,偶数之间的相对顺序也不变。
代码实现如下:
def reorder(nums):
i, j = 0, len(nums) - 1
while i < j:
if nums[i] % 2 == 0 and nums[j] % 2 == 1:
nums[i], nums[j] = nums[j], nums[i]
i += 1
j -= 1
elif nums[i] % 2 == 1:
i += 1
elif nums[j] % 2 == 0:
j -= 1
return nums
示例:
输入:[1, 2, 3, 4, 5, 6, 7, 8, 9]
输出:[1, 3, 5, 7, 9, 2, 4, 6, 8]
相关问题
2. 编写程序,输入一个包含若干整数的列表,输出一个新列表,新列表中只包含原列表中的偶数。
以下是Python中输出原列表中偶数的代码:
```python
# 原列表
lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 输出偶数列表
even_lst = [i for i in lst if i % 2 == 0]
print(even_lst) # 输出:[2, 4, 6, 8, 10]
```
该代码使用了列表推导式,通过判断每个元素是否为偶数,将偶数元素添加到新列表中。
--相关问题--:
1. 如何输出原列表中的奇数?
2. 如何将原列表中的元素按照从大到小的顺序排列?
3. 如何将两个列表合并为一个字
Python编写程序,输入一个包含若干整数的列表,输出一个新列表,新列表中奇数在前偶数在后,并且奇数之间相对顺序不变,偶数之间的相对顺序也不变。
可以使用双指针法,一个指针从前往后找偶数,一个指针从后往前找奇数,然后交换它们的位置。代码如下:
```
def odd_even_list(nums):
left, right = 0, len(nums) - 1
while left < right:
while left < right and nums[left] % 2 == 1:
left += 1
while left < right and nums[right] % 2 == 0:
right -= 1
nums[left], nums[right] = nums[right], nums[left]
return nums
```
这个函数接受一个整数列表作为参数,返回一个新的列表,其中奇数在前偶数在后,且奇数之间相对顺序不变,偶数之间的相对顺序也不变。