如何用Python交替打印数据集中首个True与False行
Python实现交替打印True/False行(跳过连续重复状态)
需求回顾
遍历包含时间字段和布尔状态(True/False)的数据集,规则如下:
- 打印第一个出现的True行
- 跳过后续连续的True行,直到遇到第一个False行并打印
- 再跳过后续连续的False行,直到遇到第一个True行并打印
- 重复上述交替逻辑直到遍历结束
示例
输入数据集(示例)
2024-05-20 10:00:00, True 2024-05-20 10:00:01, True 2024-05-20 10:00:02, False 2024-05-20 10:00:03, False 2024-05-20 10:00:04, True 2024-05-20 10:00:05, False 2024-05-20 10:00:06, True 2024-05-20 10:00:07, True 2024-05-20 10:00:08, True 2024-05-20 10:00:09, False
期望输出
2024-05-20 10:00:00, True 2024-05-20 10:00:02, False 2024-05-20 10:00:04, True 2024-05-20 10:00:05, False 2024-05-20 10:00:06, True 2024-05-20 10:00:09, False
实现代码
处理文本文件
如果数据集存储在文本文件中,可直接逐行读取处理:
# 初始化目标状态:先找第一个True target_state = True # 打开数据集文件(替换为你的文件路径) with open('dataset.txt', 'r') as f: for line in f: cleaned_line = line.strip() if not cleaned_line: continue # 跳过空行 # 拆分时间和状态(根据实际分隔符调整,这里用逗号) _, state_part = cleaned_line.split(',', 1) current_state = state_part.strip() == 'True' # 匹配目标状态时打印,并切换目标 if current_state == target_state: print(cleaned_line) target_state = not target_state
处理内存中的数据集列表
如果数据已经加载到内存列表中:
# 示例数据集列表,格式为(时间字符串, 布尔状态) dataset = [ ("2024-05-20 10:00:00", True), ("2024-05-20 10:00:01", True), ("2024-05-20 10:00:02", False), ("2024-05-20 10:00:03", False), ("2024-05-20 10:00:04", True), ("2024-05-20 10:00:05", False), ("2024-05-20 10:00:06", True), ("2024-05-20 10:00:07", True), ("2024-05-20 10:00:08", True), ("2024-05-20 10:00:09", False), ] target_state = True for time_str, state in dataset: if state == target_state: print(f"{time_str}, {state}") target_state = not target_state
处理CSV格式数据集
如果是标准CSV文件,用csv模块更可靠:
import csv target_state = True with open('dataset.csv', 'r') as f: reader = csv.reader(f) # 读取并打印表头(如果有表头的话) header = next(reader) print(','.join(header)) for row in reader: time_str, state_str = row # 兼容大小写不同的状态值 current_state = state_str.strip().lower() == 'true' if current_state == target_state: print(','.join(row)) target_state = not target_state
逻辑说明
- 通过
target_state变量跟踪当前需要寻找的状态,初始设为True以匹配第一个符合要求的行 - 每找到一个匹配目标状态的行,立即切换
target_state为相反值,这样后续会自动跳过连续的相同状态,直到找到下一个目标状态的行 - 代码可根据实际数据集的格式(分隔符、状态值写法)灵活调整拆分和状态判断逻辑
内容的提问来源于stack exchange,提问作者setsco
相关产品推荐
相关产品推荐

