一、str(字符串)
定义与特性:字符串是 Python 中最常用的数据类型之一,属于不可变序列,用于存储 Unicode 文本。字符串一旦创建,其中的字符就不能被修改,但可以通过各种方法生成新的字符串对象。
创建方式:
- 单引号:
'hello' - 双引号:
"hello" - 三引号(可用于多行文本):
'''hello'''或"""hello""" - 使用
str()函数进行类型转换
常用操作与方法:
- 索引与切片:支持正向索引和反向索引,切片语法为
[start:end:step] - 拼接与重复:使用
+拼接,使用*重复 - 格式化:支持 f-string、
format()、%三种方式,推荐使用 f-string - 查找与替换:
find()、index()、replace() - 判断前缀后缀:
startswith()、endswith() - 大小写转换:
upper()、lower()、title()、capitalize() - 去除空白:
strip()、lstrip()、rstrip() - 拆分与拼接:
split()、join() - 判断字符类型:
isdigit()、isalpha()、isalnum()、isspace()
代码示例:
s = " Hello, Python World! " 切片操作 print(s[2:7]) # 输出:Hello print(s[::-1]) # 反转字符串 大小写转换 print(s.upper()) # 输出: HELLO, PYTHON WORLD! print(s.lower()) # 输出: hello, python world! 去除空白(不会修改原字符串,返回新字符串) clean = s.strip() print(clean) # 输出:Hello, Python World! 查找与替换 idx = clean.find("Python") print(idx) # 输出:7 new_s = clean.replace("World", "CSDN") print(new_s) # 输出:Hello, Python CSDN! 拆分与拼接 words = clean.split(", ") print(words) # 输出:['Hello', 'Python World!'] joined = " - ".join(words) print(joined) # 输出:Hello - Python World! 判断方法 print(clean.startswith("Hello")) # True print(clean.endswith("!")) # True print("123".isdigit()) # True f-string 格式化(Python 3.6+) name = "Alice" age = 25 print(f"{name} is {age} years old.") # 输出:Alice is 25 years old.二、list(列表)
定义与特性:列表是 Python 中最灵活的可变序列,可以存储任意类型的元素,且支持动态增删改查。列表中的元素按照插入顺序排列,允许重复。
创建方式:
- 使用方括号:
[1, 2, 3] - 使用
list()函数:list("abc")得到['a', 'b', 'c'] - 列表推导式(推荐):
[x*2 for x in range(5)]
常用操作与方法:
- 索引与切片:与字符串相同,支持正向和反向索引
- 添加元素:
append()(尾部添加)、insert(index, item)(指定位置插入)、extend()(批量添加) - 删除元素:
remove(value)(按值删除)、pop(index)(按索引删除并返回)、del语句 - 排序与反转:
sort()(原地排序)、sorted()(返回新列表)、reverse()(原地反转) - 查找计数:
index()、count() - 列表推导式:简洁高效地生成新列表,支持条件过滤
代码示例:
# 创建列表 fruits = ["apple", "banana", "orange"] numbers = [3, 1, 4, 1, 5, 9, 2, 6] 添加元素 fruits.append("grape") fruits.insert(1, "mango") print(fruits) # 输出:['apple', 'mango', 'banana', 'orange', 'grape'] 删除元素 removed = fruits.pop(2) print(removed) # 输出:banana fruits.remove("apple") print(fruits) # 输出:['mango', 'orange', 'grape'] 排序(会修改原列表) numbers.sort() print(numbers) # 输出:[1, 1, 2, 3, 4, 5, 6, 9] numbers.sort(reverse=True) print(numbers) # 输出:[9, 6, 5, 4, 3, 2, 1, 1] 切片操作 subset = numbers[2:5] print(subset) # 输出:[5, 4, 3] 列表推导式 squares = [x**2 for x in range(10)] print(squares) # 输出:[0, 1, 4, 9, 16, 25, 36, 49, 64, 81] evens = [x for x in range(20) if x % 2 == 0] print(evens) # 输出:[0, 2, 4, 6, 8, 10, 12, 14, 16, 18] 二维列表(嵌套列表) matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] print(matrix[1][2]) # 输出:6三、tuple(元组)
定义与特性:元组与列表类似,但属于不可变序列。一旦创建就不能修改其元素(增、删、改均不允许)。由于不可变性,元组可以作为字典的键,而列表不能。
创建方式:
- 使用圆括号:
(1, 2, 3) - 不使用括号(逗号分隔):
1, 2, 3 - 单元素元组需要加逗号:
(1,),否则(1)会被当作整数 - 使用
tuple()函数进行转换
常用操作与方法:
- 索引与切片:与列表相同,但只能读取不能修改
- 解包(Unpacking):将元组元素赋值给多个变量,支持
*收集剩余元素 - 查找计数:
index()、count() - 应用场景:函数返回多个值、作为字典键、保护数据不被修改
代码示例:
# 创建元组 point = (3, 4) colors = "red", "green", "blue" # 也可省略括号 single = (42,) # 单元素元组,逗号不能省略 print(type(single)) # 输出:<class 'tuple'> 索引与切片 t = (10, 20, 30, 40, 50) print(t[0]) # 输出:10 print(t[-1]) # 输出:50 print(t[1:4]) # 输出:(20, 30, 40) 元组不可修改(以下操作会报错) t[0] = 100 # TypeError: 'tuple' object does not support item assignment 解包操作 a, b, c = (1, 2, 3) print(a, b, c) # 输出:1 2 3 使用 * 收集剩余元素 first, *rest, last = (1, 2, 3, 4, 5) print(first) # 输出:1 print(rest) # 输出:[2, 3, 4] print(last) # 输出:5 变量交换(利用元组解包) x, y = 10, 20 x, y = y, x print(x, y) # 输出:20 10 函数返回多个值(本质是返回元组) def get_min_max(nums): return min(nums), max(nums) result = get_min_max([3, 1, 4, 1, 5]) print(result) # 输出:(1, 5) min_val, max_val = result # 解包 print(min_val, max_val) # 输出:1 5 元组作为字典键(列表不能作为键) locations = {(35.68, 139.76): "Tokyo", (39.90, 116.40): "Beijing"} print(locations[(39.90, 116.40)]) # 输出:Beijing四、dict(字典)
定义与特性:字典是 Python 中的键值对映射容器,使用哈希表实现,查找效率极高(平均 O(1))。键必须是不可变类型(如字符串、数字、元组),值可以是任意类型。Python 3.7+ 字典保持插入顺序。
创建方式:
- 使用花括号:
{"name": "Alice", "age": 25} - 使用
dict()函数:dict(name="Alice", age=25) - 字典推导式:
{x: x**2 for x in range(5)} - 使用
fromkeys()创建带默认值的字典
常用操作与方法:
- 访问元素:
d[key](键不存在会报错)、d.get(key, default)(安全访问) - 修改与添加:
d[key] = value、update()批量更新 - 删除元素:
pop(key)(删除并返回值)、popitem()(删除最后一项)、del、clear() - 遍历:
keys()、values()、items() - 设置默认值:
setdefault(key, default) - 字典推导式:高效创建字典,支持条件过滤
代码示例:
# 创建字典 person = {"name": "Alice", "age": 25, "city": "Beijing"} 访问元素 print(person["name"]) # 输出:Alice print(person.get("gender", "N/A")) # 输出:N/A(键不存在时返回默认值) 修改与添加 person["age"] = 26 person["job"] = "Engineer" print(person) # 输出:{'name': 'Alice', 'age': 26, 'city': 'Beijing', 'job': 'Engineer'} 删除元素 removed_age = person.pop("age") print(removed_age) # 输出:26 print(person) # 输出:{'name': 'Alice', 'city': 'Beijing', 'job': 'Engineer'} 遍历字典 for key, value in person.items(): print(f"{key}: {value}") keys()、values()、items() 返回视图对象 print(list(person.keys())) # 输出:['name', 'city', 'job'] print(list(person.values())) # 输出:['Alice', 'Beijing', 'Engineer'] 字典推导式 squares = {x: x**2 for x in range(6)} print(squares) # 输出:{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25} 条件过滤 even_squares = {k: v for k, v in squares.items() if v % 2 == 0} print(even_squares) # 输出:{0: 0, 2: 4, 4: 16} setdefault 用法:键不存在时设置默认值 word_count = {} text = "hello world hello python" for word in text.split(): word_count.setdefault(word, 0) word_count[word] += 1 print(word_count) # 输出:{'hello': 2, 'world': 1, 'python': 1}五、set(集合)
定义与特性:集合是无序、不重复的元素集合,基于哈希表实现。集合中的元素必须是不可变类型。集合支持数学中的集合运算,如并集、交集、差集等,非常适合用于去重和成员关系测试。
创建方式:
- 使用花括号:
{1, 2, 3}(注意:空花括号{}创建的是空字典,而非空集合) - 使用
set()函数:set([1, 2, 3])、set()创建空集合 - 集合推导式:
{x for x in range(10) if x % 2 == 0}
常用操作与方法:
- 添加元素:
add()(添加单个)、update()(批量添加) - 删除元素:
remove()(元素不存在会报错)、discard()(安全删除)、pop()(随机删除一个)、clear() - 集合运算:
union()或|(并集)、intersection()或&(交集)、difference()或-(差集)、symmetric_difference()或^(对称差集) - 判断关系:
issubset()(子集)、issuperset()(超集)、isdisjoint()(是否不相交) - 去重应用:利用集合元素不重复的特性快速去重
代码示例:
# 创建集合 fruits = {"apple", "banana", "orange"} empty_set = set() # 创建空集合,不能用 {}(那是空字典) print(type(empty_set)) # 输出:<class 'set'> 添加与删除 fruits.add("grape") fruits.update(["mango", "kiwi"]) print(fruits) fruits.discard("banana") # 安全删除,不存在也不报错 print(fruits) 集合运算 a = {1, 2, 3, 4, 5} b = {4, 5, 6, 7, 8} print(a | b) # 并集:{1, 2, 3, 4, 5, 6, 7, 8} print(a & b) # 交集:{4, 5} print(a - b) # 差集(a有b没有):{1, 2, 3} print(a ^ b) # 对称差集(不同时属于两者):{1, 2, 3, 6, 7, 8} 判断关系 c = {1, 2} print(c.issubset(a)) # True,c是a的子集 print(a.issuperset(c)) # True,a是c的超集 print(a.isdisjoint({9, 10})) # True,不相交 集合推导式 even_set = {x for x in range(20) if x % 2 == 0} print(even_set) # 输出:{0, 2, 4, 6, 8, 10, 12, 14, 16, 18} 去重应用 nums = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4] unique_nums = list(set(nums)) print(unique_nums) # 输出:[1, 2, 3, 4](顺序可能不同) 成员关系测试(O(1) 时间复杂度) large_set = set(range(1000000)) print(999999 in large_set) # True,极快