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

如何用Python交替打印数据集中首个True与False行

Python实现交替打印True/False行(跳过连续重复状态)

需求回顾

遍历包含时间字段和布尔状态(True/False)的数据集,规则如下:

  1. 打印第一个出现的True行
  2. 跳过后续连续的True行,直到遇到第一个False行并打印
  3. 再跳过后续连续的False行,直到遇到第一个True行并打印
  4. 重复上述交替逻辑直到遍历结束

示例

输入数据集(示例)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 05:45:50