Python学习笔记8-组合数据类型

Python中组合数据类型(也叫复合数据类型、容器类型)是指可以存储多个元素的类型,主要包括以下四种:

类型英文符号是否有序是否可变元素是否可重复索引方式主要用途
列表list[]有序可变可重复整数索引经常需要增删改的有序数据
元组tuple()有序不可变可重复整数索引固定不变的数据、函数多返回值、做key
集合set{} 或 set()无序可变不可重复无索引(只能成员判断)去重、集合运算(交并差)
字典dict{key:value}有序(3.7+)可变key不可重复key索引(任意不可变类型)键值对映射、查找速度极快

下面按学习顺序逐个详细说明(适合做学习笔记使用):

1. 列表(list)——最常用的可变序列

# 创建方式
lst1 = []               # 空列表
lst2 = [1, 2.5, "hello", True, [10,20]]   # 任意类型,允许嵌套
lst3 = list("中国加油")   # ['中','国','加','油']
lst4 = list(range(5))     # [0,1,2,3,4]

# 常用操作(增删改查)
fruits = ["apple", "banana", "cherry"]

# 查
print(fruits[1])         # banana
print(fruits[-1])        # cherry(倒数第一个)
print("banana" in fruits)   # True

# 改
fruits[1] = "blueberry"

# 增
fruits.append("dragon")       # 末尾添加
fruits.insert(1, "kiwi")      # 在索引1位置插入
fruits.extend(["mango", "orange"])   # 批量添加

# 删
fruits.pop()             # 删除并返回最后一个
fruits.pop(1)            # 删除指定位置
fruits.remove("cherry")  # 删除第一个匹配的元素(不存在会报错)
del fruits[0]            # 删除指定位置
fruits.clear()           # 清空

# 切片(重要!)
nums = [0,1,2,3,4,5,6,7,8,9]
print(nums[2:7])      # [2,3,4,5,6]
print(nums[::2])      # [0,2,4,6,8] 步长2
print(nums[::-1])     # [9,8,7,...,0] 逆序

# 排序(原地修改)
nums.sort()           # 升序
nums.sort(reverse=True)  # 降序
fruits.sort(key=len)     # 按字符串长度排序

2. 元组(tuple)——不可变序列

t1 = (1, 2, 3)
t2 = 10, 20, 30       # 括号可以省略(推荐写上)
t3 = (5,)             # 只有一个元素必须加逗号!否则是整数5
t4 = tuple([1,2,3])   # 从列表转元组

# 元组特点:不可修改,但内容如果是可变对象,内部仍可改
t = (1, [2,3], 4)
# t[1] = 99           # 报错!不能改元组本身
t[1].append(99)       # 可以!因为改的是列表内部 → (1, [2,3,99], 4)

# 常用场景
x, y, z = 10, 20, 30         # 批量赋值(元组解包)
a, b = b, a                  # 交换变量(Python特色写法)
def func(): return 100, 200  # 函数返回多个值其实返回的是元组

3. 集合(set)——无序、不重复

s1 = {1, 2, 2, 3}          # {1,2,3} 自动去重
s2 = set("abacad")         # {'a','b','c','d'}
s3 = set([1,1,2,3])        # {1,2,3}

# 集合运算(非常强大)
a = {1,2,3,4}
b = {3,4,5,6}

print(a | b)     # 并集 {1,2,3,4,5,6}
print(a & b)     # 交集 {3,4}
print(a - b)     # 差集 {1,2}
print(a ^ b)     # 对称差集 {1,2,5,6}(在a或b中但不同时在两者中)

# 成员判断(速度非常快)
print(3 in a)    # True

# 添加/删除
a.add(7)
a.remove(1)      # 不存在会报错
a.discard(999)   # 不存在也不会报错
a.pop()          # 随机删除并返回一个元素

4. 字典(dict)——键值对映射(Python中使用最频繁的高级数据结构)

# 创建
d1 = {}                          # 空字典
d2 = {"name":"张三", "age":18, "city":"北京"}
d3 = dict(name="李四", age=20)   # 另一种写法
d4 = dict([("a",1), ("b",2)])    # 从二维列表/元组创建

# 访问
print(d2["name"])          # 张三
print(d2.get("score", 0))  # 不存在返回默认值0(推荐!)

# 修改/新增
d2["score"] = 95           # 键存在→修改,不存在→新增
d2.setdefault("gender", "男")  # 键不存在才添加

# 删除
d2.pop("age")              # 删除并返回value
del d2["city"]
d2.clear()

# 遍历(非常常用)
for k in d2:               # 默认遍历key
    print(k, d2[k])

for k,v in d2.items():     # 同时拿到key和value
    print(k, "->", v)

# 3.7+ 字典保持插入顺序

快速对比记忆口诀

  • 需要改内容 → 用列表
  • 内容固定不变 → 用元组
  • 只要去重或做集合运算 → 用集合
  • 根据含义查找(名字→成绩、学号→信息)→ 用字典

小练习(你可以自己跑跑看)

  1. 把字符串 “hello world python” 变成单词列表,再转成集合看看有什么变化?
  2. 用字典统计这段话里每个字符出现的次数(提示:可以用 dict.get() 或 collections.Counter)
  3. 交换两个变量的值,不用第三变量(用元组解包)
  4. 有一个列表 [1,3,5,2,4,3,1,6],去重并升序输出

祝你Python学习顺利!
下一节准备学什么?文件操作?函数?还是类和面向对象?可以告诉我,我继续帮你整理~

文章已创建 4695

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部