如何从含字母与数字的列表中生成符合条件元素的位置列表?
解决方案
1. 核心:用enumerate()筛选位置
enumerate()是最适合的工具——它能在遍历列表时同时返回元素索引和元素本身,完美解决你需要收集位置的需求,还能避免index()方法遇到重复元素时只返回第一个匹配位置的问题。
先获取输入列表:
input_list = list(input())
用列表推导式快速生成字母和数字的位置列表(也可以写成显式for循环,见下方):
# 收集所有字母的索引 letter_list = [idx for idx, char in enumerate(input_list) if char.isalpha()] # 收集所有数字的索引 number_list = [idx for idx, char in enumerate(input_list) if char.isdigit()]
如果习惯用显式for循环,也可以这么写:
letter_list = [] number_list = [] for idx, char in enumerate(input_list): if char.isalpha(): letter_list.append(idx) elif char.isdigit(): number_list.append(idx)
2. 后续校验逻辑
检查最左侧字母与最右侧数字的位置关系
用min()取字母列表里最靠左的索引,max()取数字列表里最靠右的索引,然后做判断:
# 先确保两个列表都不为空,避免报错 if letter_list and number_list: leftmost_letter = min(letter_list) rightmost_number = max(number_list) if leftmost_letter > rightmost_number: # 这里写不符合要求的处理逻辑,比如提示或终止流程 print("错误:最左侧字母出现在最右侧数字之后")
避免第一个数字为0
这里的"第一个数字"指的是列表中最靠左的数字,用min(number_list)拿到它的索引,再取对应元素判断:
if number_list: first_num_idx = min(number_list) first_num = input_list[first_num_idx] if first_num == '0': # 处理第一个数字为0的情况 print("错误:第一个数字不能为0")
内容的提问来源于stack exchange,提问作者Kyle
相关产品推荐
相关产品推荐

