Python列表索引获取与元素嵌套配对问题求助
Python列表操作问题解决
1. 获取重复元素索引的问题
使用list.index()函数时,只会返回元素第一次出现的索引,例如:
my_list = ['A', 'B', 'C', 'D', 'E', 'B', 'F', 'D', 'C', 'B'] idx = my_list.index('B') print("index :", idx)
这段代码输出的是第一个'B'的索引1,如果遍历列表时用index()获取每个元素的索引,重复元素都会返回第一次出现的位置,无法区分不同位置的相同元素。
解决这个问题可以用enumerate(),它能同时返回索引和元素:
my_list = ['A', 'B', 'C', 'D', 'E', 'B', 'F', 'D', 'C', 'B'] for idx, val in enumerate(my_list): if val == 'B': print(f"index of 'B': {idx}")
运行后会输出所有'B'的索引:1、5、9。
2. 字母与相邻数字配对嵌套的需求
给定列表:
my_list_2 = ['A', 'B', '2', 'C', '3', 'D', '4', 'E', 'B', '2', 'F', '6', 'D', 'C', '3', 'B']
要求将字母元素与后续相邻的数字元素配对,若字母后无相邻数字,则与'*'配对,预期结果:
[['A', '*'], ['B', '2'], ['C', '3'], ['D', '4'], ['E', '*'], ['B', '2'], ['F', '6'], ['D', '*'], ['C', '3'], ['B', '*']]
原代码的问题
你尝试的列表推导式存在以下问题:
- 遍历范围是
range(0, len(my_list_2)-1),会漏掉最后一个元素'B'的处理 - 逻辑判断仅覆盖了「当前是字母且下一个也是字母」的情况,未处理下一个元素是数字的场景,同时还会错误处理数字元素
正确实现
循环版实现
用enumerate()遍历列表,只处理字母元素,再判断下一个元素是否为数字:
my_list_2 = ['A', 'B', '2', 'C', '3', 'D', '4', 'E', 'B', '2', 'F', '6', 'D', 'C', '3', 'B'] result = [] for idx, item in enumerate(my_list_2): if item.isalpha(): # 检查是否存在下一个元素,且该元素是数字 if idx + 1 < len(my_list_2) and my_list_2[idx+1].isdigit(): result.append([item, my_list_2[idx+1]]) else: result.append([item, '*']) print("Result : ", result)
列表推导式版实现
如果偏好简洁的列表推导式,也可以这样写:
my_list_2 = ['A', 'B', '2', 'C', '3', 'D', '4', 'E', 'B', '2', 'F', '6', 'D', 'C', '3', 'B'] result = [ [item, my_list_2[idx+1]] if (idx+1 < len(my_list_2) and my_list_2[idx+1].isdigit()) else [item, '*'] for idx, item in enumerate(my_list_2) if item.isalpha() ] print("Result : ", result)
内容的提问来源于stack exchange,提问作者Pramu
相关产品推荐
相关产品推荐

