如何在Python列表中提取每个指定子串前的第3个元素?
提取每个'X'之前第3个元素的解决方案
问题背景
给定原始列表:
['6.00', '1.85', 'X', '2.25', '1.26', 'X', '6.50', '1.80', 'X', '6.50', '1.95', 'X', '34.00', '5.50']
需要提取每个'X'之前的第3个元素,组成如下结果列表:
['6.00', '2.25', '6.50', '6.50']
之前尝试通过删除元素的方式实现,但当列表末尾存在'X'后的多余元素,或'X'间距不均匀时,代码会失效,原代码如下:
data = ['6.00', '1.85', 'X', '2.25', '1.26', 'X', '6.50', '1.80', 'X', '6.50', '1.95', 'X', '34.00', '5.50'] x = np.array(data) x = np.delete(x, np.arange(1, x.size, 3)) x = np.delete(x, np.arange(1, x.size, 2))
可行解决方案
方法一:纯Python遍历(通用适配所有情况)
直接遍历列表,定位每个'X'的位置,判断位置合法后提取前第3个元素:
data = ['6.00', '1.85', 'X', '2.25', '1.26', 'X', '6.50', '1.80', 'X', '6.50', '1.95', 'X', '34.00', '5.50'] result = [] for idx, item in enumerate(data): if item == 'X' and idx >= 2: # 索引从0开始,'X'的位置至少要≥2才能取到前第3个元素 result.append(data[idx - 2]) print(result) # 输出:['6.00', '2.25', '6.50', '6.50']
方法二:Numpy实现(适合大规模数据)
通过Numpy定位'X'的索引,筛选合法索引后提取目标元素:
import numpy as np data = ['6.00', '1.85', 'X', '2.25', '1.26', 'X', '6.50', '1.80', 'X', '6.50', '1.95', 'X', '34.00', '5.50'] arr = np.array(data) # 找到所有'X'的索引 x_positions = np.where(arr == 'X')[0] # 过滤掉无法取到前第3个元素的位置(索引<2) valid_positions = x_positions[x_positions >= 2] # 提取对应元素并转为列表 result = arr[valid_positions - 2].tolist() print(result) # 输出:['6.00', '2.25', '6.50', '6.50']
这两种方法不受'X'间距、列表末尾多余元素的影响,能稳定提取符合要求的元素。
内容的提问来源于stack exchange,提问作者Kankan2000
相关产品推荐
相关产品推荐

