如何生成数字列表并实现偶数在前、奇数在后的排序?
问题描述
"我是一位世界知名的时装设计师,即将为下个月的时装周筛选新模特。我让他们都佩戴不同的编号,我需要你将偶数编号的模特和奇数编号的模特分开,确保偶数编号的模特排在前面。我不在乎他们说这是编号歧视,我只是偏爱偶数,没问题吧?这并不奇怪!"
预期输出示例
Enter the number of elements: 4 Element #1: 6 Element #2: 5 Element #3: 17 Element #4: 12 Arranged Elements: Element #1: 6 Element #2: 12 Element #3: 5 Element #4: 17
如你所见,元素列表已按偶数在前、奇数在后的顺序排列。
当前代码
num_list = [] listLength = int(input("Enter the number of elements: ")) num = 1 for i in range(listLength): el = int(input("Element #%d: " % num)) num += 1 if el % 2 == 0: num_list.append(el) elif el % 2 != 0:: num_list.append(el) print(num_list)
需求
实现输入数字列表后,将偶数放在前面、奇数放在后面的排序功能,但当前代码无法达成该效果,需要修复。
解决方案
你的代码存在两个核心问题:
- 语法错误:
elif el % 2 != 0::多了一个冒号,且if语句缩进不正确 - 逻辑错误:直接将所有元素按输入顺序追加到同一个列表,没有区分偶数和奇数的位置
以下是修复后的代码,完全符合你的需求:
# 分别初始化偶数和奇数列表 even_models = [] odd_models = [] total = int(input("Enter the number of elements: ")) # 收集输入的编号 for i in range(1, total + 1): model_id = int(input(f"Element #{i}: ")) if model_id % 2 == 0: even_models.append(model_id) else: odd_models.append(model_id) # 合并列表:偶数在前,奇数在后 arranged_models = even_models + odd_models # 按示例格式输出结果 print("\nArranged Elements:") for idx, model_id in enumerate(arranged_models, start=1): print(f"Element #{idx}: {model_id}")
代码说明
- 分离存储:用两个列表分别存放偶数和奇数编号,确保所有偶数自然排在奇数前面
- 语法修复:修正了原代码的缩进错误和多余冒号问题
- 格式匹配:使用
enumerate配合start=1实现示例中的序号输出,用f-string让字符串格式化更简洁 - 逻辑清晰:先收集所有输入,再合并输出,完全符合你要的排序规则
内容的提问来源于stack exchange,提问作者Xiofuliangmei
相关产品推荐
相关产品推荐

