2. 编写程序,输入一个包含若干整数的列表,输出一个新列表,新列表中奇数在前偶数在后,并且奇数之间的相对顺序不变,偶数之间的相对顺序也不变。
时间: 2023-04-16 07:03:30 浏览: 91
可以使用双指针的方法,一个指针从前往后扫描奇数,另一个指针从后往前扫描偶数,当两个指针相遇时,即完成了列表的重新排列。
具体实现如下:
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程序,2、编写程序,输入一个包含若干整数的列表,输出一个新列表,新列表中奇数在前偶数在后,并且奇数之间相对顺序不变,偶数之间的相对顺序也不变
你可以使用Python的列表推导式和条件判断来实现这个功能。下面是一个示例程序:
```python
def separate_odd_even(numbers):
odd_numbers = [num for num in numbers if num % 2 != 0]
even_numbers = [num for num in numbers if num % 2 == 0]
# 确保奇数列表按原顺序排列,如果偶数多于奇数,则填充剩余位置
combined_list = odd_numbers + ([None] * (len(even_numbers) - len(odd_numbers))) + even_numbers
return combined_list
# 示例输入
input_list = list(map(int, input("请输入一个包含若干整数的列表,以空格分隔:").split()))
output_list = separate_odd_even(input_list)
print(f"新列表: {output_list}")
阅读全文