06_输入输出

输入输出

基础输入

# 单个整数
n = int(input())

# 多个整数(空格分隔)
a, b = map(int, input().split())

# 一行整数转列表
arr = list(map(int, input().split()))

# 去除换行符
s = input().strip()  # 去除首尾空白(含 \n)

# 读取 n 行到列表
arr = [int(input()) for _ in range(n)]

# 读取到文件结尾(EOF):直接遍历 sys.stdin
for line in sys.stdin:
    line = line.strip()
    if not line:
        break
    a, b = map(int, line.split())
    print(a + b)
# ⚠️ input() 会保留换行符,需要 strip()
s = input().strip()  # 去除 '\n'

# ⚠️ int() 会自动去除空白和符号
int("  123  ")  # 123
int("-123")     # -123
int("+123")     # +123

readline() / readlines() / read() 的区别

import sys

# 输入:
# Hello
# World
# !

# 使用 readline():每次读一行,保留 '\n',EOF 时返回 ""
line1 = sys.stdin.readline()  # "Hello\n"
line2 = sys.stdin.readline()  # "World\n"
line3 = sys.stdin.readline()  # "!\n"
line4 = sys.stdin.readline()  # ""

# 使用 readlines():一次读完,按行分成列表
lines = sys.stdin.readlines()  # ["Hello\n", "World\n", "!\n"]

# 使用 read():一次读完,整个内容作为一个字符串
content = sys.stdin.read()  # "Hello\nWorld\n!\n"

strip() 与 split()

s = "  hello  \n\t"

print(repr(s.rstrip()))  # 移除右侧空白字符 → "'  hello'"
print(repr(s.lstrip()))  # 移除左侧空白字符 → "'hello  \n\t'"
print(repr(s.strip()))   # 移除两侧空白字符 → "'hello'"
str.split(sep=None, maxsplit=-1)
  • sep:分隔符,默认为任何空白字符
  • maxsplit:最大分割次数,默认为 -1(不限制)

输出

print(x)           # 单个值
print(a, b, c)     # 多个值(默认空格分隔)

# 空格分隔的列表
print(*ans)                    # 解包输出
print(" ".join(map(str, ans))) # join 输出

# 不换行输出
print(x, end='')     # 末尾不换行
print(x, end=' ')    # 末尾加空格

# 交互题:必须加 flush!强制刷新缓冲区
print(f"? {mid}")
sys.stdout.flush()

常用配置

# 加速输入
import sys
input = sys.stdin.readline
# 设置递归深度(DFS 必备)
sys.setrecursionlimit(10**6)

# 常用导入
import math
import itertools
import bisect
from collections import deque, Counter, defaultdict

# 常用常量
INF = 10**18          # 无穷大(整数,推荐)
MOD = 10**9 + 7       # 取模

# ⚠️ 禁止用浮点数作为 INF,会导致 TLE
# INF = 1e9           # 错误!浮点数运算慢
# INF = float('inf')  # 错误!浮点数运算慢

常见陷阱

# 列表 * n 可能是浅拷贝
a = [[0] * 3] * 3     # 错误!三个引用同一列表
a = [[0] * 3 for _ in range(3)]  # 正确

# 浮点数比较
abs(a - b) < 1e-9     # 判断浮点数相等

空字典 vs 空集合

a = {}        # 空字典(dict)
b = set()    # 空集合(set)

print(type(a))  # <class 'dict'>
print(type(b))  # <class 'set'>

如何创建空集合

# ❌ 错误:这是字典,不是集合
a = {}

# ✅ 正确:创建空集合
b = set()

# ✅ 正确:创建带初始值的集合
c = {1, 2, 3}

记忆方法

写法 类型 说明
{} dict 大括号里有键值对或为空时是字典
{1} set 大括号里只有值时是集合
set() set 明确表示集合

典型应用:差分数组

diff = {}

# 对区间 [l, r) 加 v
diff[l] = diff.get(l, 0) + v    # 起点加 v
diff[r] = diff.get(r, 0) - v    # 终点减 v

06_输入输出
https://mingsm17518.github.io/2026/09/19/算法学习/01_数据结构/06_输入输出/
作者
Ming
发布于
2026年9月19日
更新于
2026年9月20日
许可协议