数据类型
打印类型
python
print(type(18))输出: <class 'int'>
整数 int
python
import sys
# 整数 没有小数点的数字,可以是正数或负数,也可以是0
age = 18
temp = -5
score = 0
# 当数很大时,我们可以使用下划线来分隔数字,使代码更易读
big_num = 1_000_000
price = 300_000
# Python 中整数的范围是无限的(取决于计算机的内存大小),这意味着我们可以使用任意大的整数
huge_num = 9**9999
# 会报错,因为print会将整数转换为字符串,默认限制是4300位
# print(huge_num)
# 解决办法
sys.set_int_max_str_digits(0)
# 现在可以打印出 huge_num 了
print(huge_num)浮点数 float
python
# 浮点数 有小数点的数字,可以是正数或负数
height = 1.75
weight = 65.5
temp = -25.5
# 当数很大或很小时,我们可以使用科学计数法来表示
big_num = 1.23e6
small_num = 1.23e-6
# e 和 E 都可以用来表示科学计数法
light_speed = 3E8
# 浮点数的精度是有限的,这意味着我们不能精确表示所有的浮点数
0.1 + 0.2 == 0.3 # False
# 解决办法
# 1. 直接比较两个浮点数的差是否小于一个很小的数
abs(0.1 + 0.2 - 0.3) < 1e-10 # True
# 2. 使用 decimal 模块
from decimal import Decimal
Decimal('0.1') + Decimal('0.2') == Decimal('0.3') # True字符串 str
python
# 字符串4种定义方法 用引号包起来的任意字符序列
# 单引号
name = '张三'
# 双引号
gender = "男"
# 三引号(可以包含换行符)
hobby = '''篮球'''
# 三引号(可以包含换行符)
hat = """黑色"""
# 字符串的重复
repeat = "abc" * 3
print(repeat)
# 字符串的截取
substring = "hello world"[6:11]
print(substring)
# 字符串的长度
print(len("hello world")) # 11格式化输出
python
# 1. 字符串拼接
print("你好," + name + "!")
# 2. 使用 % 运算符
> %s 字符串占位符(万能)
> %d 整数占位符(十进制)
> %f 浮点数占位符
> %i 整数占位符
print("我是%s,我今年%d岁。" % (name, age))
# %±m.n[s/d/f/n] 控制占位宽度和精度
> ± 正数是向右对齐,负数是向左对齐
> m 字符串的最小宽度,位数不够回自动使用空格补全(位数小于字符串长度则不起作用)
> n 精度控制,最多输出n个字符(位数大于等于n则不起作用)
print("我是%s,我今年%03d岁。" % (name, age)) # 我是张三,我今年018岁。
# 3. 使用 format() 方法
print("我是{},我今年{}岁。".format(name, age))
# 4. 使用 f-string 格式化输出(推荐)
print(f"我是{name},我今年{age}岁。")
# 5. 格式化输出的其他方法
print(f"我是{name},我今年{age:.2f}岁。")转义字符
python
# 转义字符 用于在字符串中表示一些特殊的字符
# \' 单引号
# \" 双引号
# \n 换行符
# \\ 反斜杠 输出反斜杠
# \b 退格符 输出退格
# \r 使光标回到本行开头
# \t 水平制表符(让光标移动到下一个制表位置)
print("hello'world") # hello'world
print("hello\"world") # hello"world
print("hello\nworld")
# hello
# world
print("hello\\world") # hello\world
print("world❥\b") # world
# expandtabs() 方法将字符串中的制表符替换为空格,即替换为4个空格
print(123412341234)
print("ab\tcd",expandtabs(4))
print("abc\td",expandtabs(4))
print("abcd\ta",expandtabs(4))
#123412341234
#ab cd
#abc d
#abcd a布尔值 bool
布尔类型是int的子类型,底层的本质是整数 0 和 1
python
# 布尔值 只有 True 和 False 两个值
is_student = True
is_teacher = False
# 布尔值可以用于条件判断
if is_student:
print("你是个学生")
else:
print("你不是个学生")列表 list (序列)
列表是有序的可变序列,每个元素都有一个唯一的索引
定义
python
# 定义一个包含元素的列表
my_list = [1, 2, 3, "hello", True]
# 索引 列表的索引从0开始,负数索引从-1开始
print(my_list[0]) # 1
print(my_list[-1]) # True
# 列表的重复
repeat = [1, 2, 3] * 3
print(repeat) # [1, 2, 3, 1, 2, 3, 1, 2, 3]
# 列表的截取
sub_list = my_list[1:4]
print(sub_list) # [2, 3, "hello"]
# 列表的长度
print(len(my_list)) # 5
# 空列表
empty_list1 = []
empty_list2 = list()
# 嵌套列表
nested_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
print(nested_list) # [[1, 2, 3], [4, 5, 6], [7, 8, 9]]增删改查
python
# 增 [1, 2, 3, "hello", True]
my_list.append(4)
print(my_list) # [1, 2, 3, "hello", True, 4]
my_list.insert(2, "world")
print(my_list) # [1, 2, "world", 3, "hello", True, 4]
my_list.extend([5, 6, 7])
print(my_list) # [1, 2, "world", 3, "hello", True, 4, 5, 6, 7]
# 删 [1, 2, 3, "hello", True, 4]
my_list.remove(3)
print(my_list) # [1, 2, "hello", True, 4]
my_list.pop()
print(my_list) # [1, 2, "hello", True]
del my_list[2]
print(my_list) # [1, 2, True, 4]
my_list.clear()
print(my_list) # []
# 查 [1, 2, True, 4]
print(2 in my_list) # True
print("hello" not in my_list) # False
print(my_list.index(True)) # 2
print(my_list[2]) # True
print(my_list[1:3]) # [2, True]
# 查5出现的次数
print(my_list.count(5)) # 0
# 改 [1, 2, "hello", True, 4]
my_list[0] = 100
print(my_list) # [100, 2, "hello", True, 4]
my_list[1:3] = [5, 6]
print(my_list) # [100, 5, 6, True, 4]
my_list.reverse()
print(my_list) # [4, True, 6, 5, 100]
my_list.sort()
print(my_list) # [4, 5, 6, True, 100]
my_list.sort(reverse=True)
print(my_list) # [100, 6, 5, True, 4]遍历
python
my_list [100, 6, 5, True, 4]
# while 循环遍历列表
index = 0
while index < len(my_list):
print(my_list[index]) # 100 6 5 True 4
index += 1
# for 循环遍历列表
for item in my_list:
print(item) # 100 6 5 True 4
for index in range(len(my_list)):
print(my_list[index]) # 100 6 5 True 4
for index, item in enumerate(my_list):
print(index, item) # 0 100 1 6 2 5 3 True 4元组 tuple (序列)
元组是不可变的序列,一旦创建就不能修改
定义
python
# 定义一个包含元素的元组
my_tuple = (1, 2, 3, "hello", True, [4, 5])
# 元祖中的列表是可变的,所以可以修改
my_tuple[5].append(6)
print(my_tuple) # (1, 2, 3, "hello", True, [4, 5, 6])序列的通用操作
提示
python
my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9]
# 切片 [start:stop:step]
# start: 切片的起始索引,默认值为0
# stop: 切片的结束索引,默认值为序列的长度
# step: 切片的步长,默认值为1
# 列表、元组、集合、字典都支持切片操作
print(my_list[1:5]) # [2, 3, 4, 5]
print(my_list[1:5:2]) # [2, 4]
print(my_list[1:5:-2]) # [3, 1]
print(my_list[5:1:-2]) # [6, 4]
#当起始索引大于结束索引时,步长必须为负数,否则会返回空列表
print(my_list[5:1:2]) # []
print(my_list[::-1]) # [9, 8, 7, 6, 5, 4, 3, 2, 1]
# 相加
print(my_list + [10, 11, 12]) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
# 相乘
print(my_list * 2) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4, 5, 6, 7, 8, 9]集合 set/frozenset
set 可变集合 无序的不重复元素的集合
frozenset 不可变集合 无序的不重复元素的集合
集合中不能嵌套可变集合,但可以嵌套不可变集合(只有不可变的东西才能被添加到集合中)
定义
python
# 可变集合
my_set = {1, 2, 3, "hello", True}
print(my_set) # {1, 2, 3, "hello", True}
# 不可变集合
my_frozenset = frozenset({1, 2, 3, "hello", True})
print(my_frozenset) # frozenset({1, 2, 3, "hello", True})
# 空集合
empty_error = {} # 空集合不能使用 {} 定义, 会被解释为空字典
empty_set1 = set()
empty_set2 = frozenset()增删改查
python
# 可变集合
my_set = {1, 2, 3, "hello", True}
# 增
my_set.add(4)
print(my_set) # {1, 2, 3, "hello", True, 4}
my_set.update([5, 6, 7])
print(my_set) # {1, 2, 3, "hello", True, 4, 5, 6, 7}
# 删
my_set.remove(3) # 删除元素3, 如果元素不存在会报错
print(my_set) # {1, 2, "hello", True, 4, 5, 6, 7}
my_set.discard(5) # 删除元素5, 如果元素不存在不会报错
print(my_set) # {1, 2, "hello", True, 4, 6, 7}
my_set.pop() # 随机删除一个元素,返回删除的元素
print(my_set) # {1, 2, "hello", True, 4, 6, 7}
my_set.clear()
print(my_set) # set()
# 改 (删+增)
# 查
print(2 in my_set) # True
print("hello" not in my_set) # False常用方法/数学运算
python
# difference() 方法返回两个集合的差集
set1 = {1, 2, 3, 4, 5}
set2 = {4, 5, 6, 7, 8}
print(set1.difference(set2)) # {1, 2, 3}
# difference_update() 方法将两个集合的差集更新到第一个集合,无返回值
set1 = {1, 2, 3, 4, 5}
set2 = {4, 5, 6, 7, 8}
set1.difference_update(set2)
print(set1) # {1, 2, 3}
# union() 方法返回两个集合的并集
set1 = {1, 2, 3, 4, 5}
set2 = {4, 5, 6, 7, 8}
print(set1.union(set2)) # {1, 2, 3, 4, 5, 6, 7, 8}
# issubset() 方法判断一个集合是否是另一个集合的子集
set1 = {1, 2, 3, 4, 5}
set2 = {4, 5, 6, 7, 8}
print(set1.issubset(set2)) # False
# issuperset() 方法判断一个集合是否是另一个集合的超集
set1 = {1, 2, 3, 4, 5}
set2 = {4, 5, 6, 7, 8}
print(set1.issuperset(set2)) # False
# isdisjoint() 方法判断两个集合是否没有交集
set1 = {1, 2, 3, 4, 5}
set2 = {4, 5, 6, 7, 8}
print(set1.isdisjoint(set2)) # False
# | 并集
print(set1 | set2) # {1, 2, 3, 4, 5, 6, 7, 8}
# & 交集
print(set1 & set2) # {4, 5}
# - 差集
print(set1 - set2) # {1, 2, 3}
# ^ 对称差集(两个集合中不重复的元素)
print(set1 ^ set2) # {1, 2, 3, 6, 7, 8}遍历
python
# 遍历集合 集合不能使用while循环遍历
for item in my_set:
print(item) # 1 2 3 4 5 6 7字典 dict
字典是无序的可变序列,每个元素都有一个唯一的键,键必须是不可变的,值可以是任意类型
定义
python
# 定义一个包含元素的字典
my_dict = {"name": "张三", "age": 18, "is_student": True}
print(my_dict) # {"name": "张三", "age": 18, "is_student": True}
# 空字典
empty_dict1 = {}
empty_dict2 = dict()
# 嵌套字典
nested_dict = {"name": "张三", "age": 18, "is_student": True, "address": {"city": "北京", "district": "东城区"}}
print(nested_dict) # {"name": "张三", "age": 18, "is_student": True, "address": {"city": "北京", "district": "东城区"}}增删改查
python
# 定义一个包含元素的字典
my_dict = {"name": "张三", "age": 18, "is_student": True}
# 增/改
my_dict["gender"] = "男"
print(my_dict) # {"name": "张三", "age": 18, "is_student": True, "gender": "男"}
my_dict.update({"age": 20, "is_student": False})
print(my_dict) # {"name": "张三", "age": 20, "is_student": False, "gender": "男"}
# 删
del my_dict["gender"]
print(my_dict) # {"name": "张三", "age": 20, "is_student": False}
# pop 方法删除指定键的元素,当指定元素不存在是,可以不报错,并且可以指定返回的默认值
my_dict.pop("age")
print(my_dict) # {"name": "张三", "is_student": False}
result = my_dict.pop("age", "年龄不存在")
print(result) # 年龄不存在
my_dict.clear()
print(my_dict) # {}
# 查
print(my_dict["name"]) # 张三
print(my_dict.get("age")) # None (如果键不存在,返回None)
print(my_dict.get("age", 18)) # 18 (如果键不存在,返回默认值18)常用方法
python
# keys() 方法返回字典所有的键 返回dict_keys类型
print(my_dict.keys()) # dict_keys(["name", "is_student"])
# values() 方法返回字典所有的值 返回dict_values类型
print(my_dict.values()) # dict_values(["张三", False])
# items() 方法返回字典所有的键值对 返回dict_items类型
print(my_dict.items()) # dict_items([("name", "张三"), ("is_student", False)])遍历
python
# 遍历字典 不能使用while循环遍历
my_dict = {"name": "张三", "age": 18, "is_student": True}
for key, value in my_dict.items():
print(key, value) # name 张三 age 18 is_student False