You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 13:52:29