数据类型

内置类型总览

类型示例可变有序
int42
float3.14
boolTrue
str"hello"
list[1, 2, 3]
tuple(1, 2, 3)
dict{"a": 1}是(3.7+)
set{1, 2, 3}
frozensetfrozenset({1,2})
bytesb"hello"
NoneTypeNone

数值类型

# int:任意精度
x = 42
x = 0xFF        # 十六进制 255
x = 0b1010      # 二进制 10
x = 1_000_000   # 下划线分隔(3.6+)
 
# float:IEEE 754 双精度
f = 3.14
f = 1.5e10      # 科学计数法
 
# complex
c = 3 + 4j
c.real   # 3.0
c.imag   # 4.0
 
# bool 是 int 的子类
True + True    # 2
int(True)      # 1
bool(0)        # False
bool("")       # False
bool([])       # False
bool(None)     # False

字符串

s = "hello"
s = 'world'
s = """多行
字符串"""
 
# 常用方法
s.upper()               # "HELLO"
s.lower()
s.strip()               # 去除首尾空白
s.split(",")            # 按分隔符拆分
",".join(["a", "b"])    # "a,b"
s.replace("l", "r")
s.startswith("he")      # True
s.endswith("lo")        # True
s.find("ll")            # 2,不存在返回 -1
s.index("ll")           # 2,不存在抛 ValueError
s.count("l")            # 2
s.zfill(10)             # 左侧补零
s.center(10, "-")       # "--hello---"
 
# f-string(3.6+,推荐)
name, age = "Alice", 30
f"{name} is {age}"       # "Alice is 30"
f"{3.14:.2f}"            # "3.14"
f"{1000000:,}"           # "1,000,000"
f"{'hello':>10}"         # "     hello"
 
# 字符串不可变
s = "hello"
# s[0] = "H"  # TypeError
s = "H" + s[1:]          # 正确:创建新字符串

列表

lst = [1, 2, 3, 4, 5]
 
# 索引与切片
lst[0]       # 1
lst[-1]      # 5
lst[1:3]     # [2, 3]
lst[::2]     # [1, 3, 5]
lst[::-1]    # [5, 4, 3, 2, 1](反转)
 
# 常用方法
lst.append(6)
lst.insert(0, 0)
lst.extend([7, 8])
lst.remove(3)            # 删除第一个匹配值
lst.pop()                # 弹出末尾
lst.pop(0)               # 弹出指定位置
lst.index(2)
lst.count(1)
lst.sort()
lst.sort(key=lambda x: -x)
lst.reverse()
sorted(lst)              # 返回新列表,不修改原列表
lst.copy()               # 浅拷贝
 
# 列表推导式
squares = [x**2 for x in range(10)]
even    = [x for x in range(20) if x % 2 == 0]
flat    = [x for row in matrix for x in row]

元组

t = (1, 2, 3)
t = 1, 2, 3              # 括号可省略
t = (42,)                # 单元素元组必须有逗号
t = ()                   # 空元组
 
# 解包
a, b, c = t
a, *rest = (1, 2, 3, 4)  # a=1, rest=[2,3,4]
_, b, _  = t             # 忽略不需要的值
 
t.count(1)
t.index(2)

字典

d = {"name": "Alice", "age": 30}
d = dict(name="Alice", age=30)
 
# 访问
d["name"]                    # "Alice"
d.get("name")                # "Alice"
d.get("x", "默认")           # 键不存在时返回默认值
 
# 修改
d["age"] = 31
d.update({"age": 32, "city": "Beijing"})
 
# 删除
del d["age"]
d.pop("age")                 # 删除并返回值
d.pop("x", None)             # 键不存在时不报错
 
# 遍历
for k in d:             pass
for k, v in d.items():  pass
for v in d.values():    pass
 
# 字典推导式
squares = {x: x**2 for x in range(5)}
 
# 合并(Python 3.9+)
merged = d1 | d2
d1 |= d2
 
# 其他常用方法
d.keys()
d.values()
d.items()
d.setdefault("x", 0)        # 键不存在时写入默认值并返回

集合

s = {1, 2, 3}
s = set([1, 2, 2, 3])   # {1, 2, 3},自动去重
s = set()               # 空集合(不能用 {},那是空 dict)
 
s.add(4)
s.remove(1)             # 不存在抛 KeyError
s.discard(99)           # 不存在不报错
s.pop()                 # 随机弹出
 
# 集合运算
a | b    # 并集
a & b    # 交集
a - b    # 差集(a 有 b 没有)
a ^ b    # 对称差集
a <= b   # a 是 b 的子集
a >= b   # a 是 b 的超集
 
# 集合推导式
even_set = {x for x in range(10) if x % 2 == 0}

类型转换

int("42")         # 42
int(3.9)          # 3(截断,不四舍五入)
int("0xFF", 16)   # 255
float("3.14")     # 3.14
str(42)           # "42"
bool(0)           # False
list("abc")       # ['a', 'b', 'c']
tuple([1, 2, 3])  # (1, 2, 3)
set([1, 1, 2])    # {1, 2}
dict([("a", 1)])  # {"a": 1}

类型判断

type(42)                    # <class 'int'>
isinstance(42, int)         # True
isinstance(True, int)       # True(bool 是 int 子类)
isinstance(42, (int, str))  # 多类型判断

None

x = None
x is None        # True(推荐用 is,不用 ==)
x is not None
 
def fn():
    pass         # 无 return 时隐式返回 None

相关链接