数据结构
python数据结构比较复杂
- 支持组织和存储数据
- 支持复杂的数据关系
- 优化程序性能
四类复合结构:tuple list dict set
序列类型:
- 种类:字符串、元组、列表
– 字符串:可以操作
集合类型:set类型
- 特征:没有顺序、不可重复
映射关系:字典类型
序列数据类型:存储有序元素集合的组和数据类型
字符串定义:单引号或者双引号包含一串字符
字符串索引:[] 中括号提取;
- 范围:正向索引 [-1] [n-1];反向索引 [-1] [-n]
字符串切片:[m n] 索引连续的一段,称作切片,提取得到m到n-1个(包含起始,不包含终止)
% 完整切片语法 str [start: end: step]
% start, end, step 分别默认为 0, n, 1
s[1:4]
s[1:4:1]
s[1:4:2]
s[:] # 提取字符串所有元素
s[::-1] #倒序提取列表所有元素
字符串修改
- 字符串元素值不可改变
- 字符串可以重新赋值
上述涵义:
# 错误代码
greeting = 'hello world'
greeting[0] = J
# 正确代码
greeting = 'hello world'
greeting= ‘J’
字符串操作符
拼接 +
重复 *
比较操作符 (==、!=、>、<)
# 按照ASCII 值比较字符串
str1 = "apple"
str2 = "banana"
print(str1 == str2) # False
print(str1 != str2) # True
print(str1 < str2) # True
print(str1 > str2) # False
for 循环序列 & 成员操作符 in = 循环字符串元素
# %%
for letter in 'banana':
print(letter)
字符串对象与方法
复合数据类型 功能:保存数据,提供内置于类型的函数 (python提供的内置函数)通过python手册查询或者问AI
复杂类型变量:对象
复杂类型的内置函数:方法(和普通函数区分开)
可以通过 对象名.方法名(参数) 调用特定方法
#定义字符串对象
text = "hello, python!"
# 调用对象方法
print(text.upper())
print(text.lower())
https://www.geeksforgeeks.org/python-string-methods/
以下是Python字符串常用方法的表格整理,可直接复制使用:
| 方法名 | 作用描述 | 示例 |
|---|---|---|
str.upper() | 将字符串所有字符转为大写 | "hello".upper() → "HELLO" |
str.lower() | 将字符串所有字符转为小写 | "HELLO".lower() → "hello" |
str.capitalize() | 首字母大写,其余小写 | "hello world".capitalize() → "Hello world" |
str.title() | 每个单词首字母大写 | "hello world".title() → "Hello World" |
str.strip() | 移除字符串两端空白字符 | " hello ".strip() → "hello" |
str.lstrip() | 移除字符串左侧空白字符 | " hello ".lstrip() → "hello " |
str.rstrip() | 移除字符串右侧空白字符 | " hello ".rstrip() → " hello" |
str.replace(old, new[, count]) | 替换指定子串(可选替换次数) | "hello".replace("l", "L", 1) → "heLlo" |
str.split(sep=None) | 按分隔符分割字符串为列表 | "a,b,c".split(",") → ['a', 'b', 'c'] |
str.join(iterable) | 将可迭代对象元素用字符串连接 | "-".join(['a', 'b', 'c']) → "a-b-c" |
str.startswith(prefix) | 检查字符串是否以指定前缀开头 | "hello".startswith("he") → True |
str.endswith(suffix) | 检查字符串是否以指定后缀结尾 | "hello".endswith("lo") → True |
str.find(sub) | 查找子串首次出现位置(未找到返回-1) | "hello".find("ll") → 2 |
str.count(sub) | 统计子串出现次数 | "hello".count("l") → 2 |
str.isalpha() | 检查字符串是否只包含字母 | "abc".isalpha() → True |
str.isdigit() | 检查字符串是否只包含数字 | "123".isdigit() → True |
str.isalnum() | 检查字符串是否只包含字母或数字 | "abc123".isalnum() → True |
str.zfill(width) | 用零填充字符串至指定宽度 | "42".zfill(5) → "00042" |
str.format() | 格式化字符串 | "{} {}".format("hello", "world") → "hello world" |
f-string | 字符串插值(Python 3.6+) | name = "Alice"; f"Hello {name}" → "Hello Alice" |
注:所有方法均返回新字符串(原始字符串不可变),[ ]内为可选参数。
列表
列表定义
列表是一种序列数据结构,和字符串的区别:
以下为整理成表格格式的字符串与列表核心区别对比,可直接复制使用:
| 对比项 | 字符串 (String) | 列表 (List) |
|---|---|---|
| 元素类型 | 仅能包含字符 | 可包含任意数据类型(数字、字符串、列表等) |
| 定义符号 | 单引号 ' ' 或双引号 " " | 中括号 [ ] |
| 可变性 | 不可变(创建后无法修改元素) | 可变(可增删改元素) |
| 示例 | "Hello" 或 'Python' | [1, "a", [2, 3], True] |
特点说明:
- 字符串是序列类型,但内容受限于字符且不可变;
- 列表是容器类型,支持混合数据类型且可动态修改。
# 整数列表
numbers = [1, 2, 3, 4, 5]
# 字符串列表
fruits = ["apple", "banana", "cherry"]
# 混合类型列表
mixed_list = [1, "hello", 3.14, True]
# 嵌套列表
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
# 空列表
empty_list = []
列表切片
[m:n] 提取列表中连续的一段。包含起始不包含终止元素。
>>> matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> matrix[1:2]
[[4, 5, 6]]
>>> matrix[:]
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
列表特点:可改变(mutable)
numbers = [1,2,3]
numbers[0] = 2
numbers
[2, 2, 3]
列表操作符
拼接、重复 in 包含元素,for + in 配合循环列表元素
cheeses = [‘Cheddar’, ‘Edam’, ‘Gouda’]
for cheese in cheeses:
print('give me some ’ + cheese)
for x in []:
print(‘This will not print’)
列表方法
以下是常见的列表操作符及其功能的表格总结,内容清晰且可复制:
列表操作符汇总表
| 操作符 | 符号/方法 | 功能描述 | 示例(Python) |
|---|---|---|---|
| 索引 | [] | 访问列表指定位置元素 | lst[0] 获取第一个元素 |
| 切片 | [:] | 截取列表子集 | lst[1:3] 获取第2到3个元素 |
| 追加 | .append() | 在列表末尾添加元素 | lst.append(4) |
| 扩展 | .extend() | 合并另一个列表 | lst.extend([5,6]) |
| 插入 | .insert() | 在指定位置插入元素 | lst.insert(1, 'x') |
| 删除 | .remove() | 删除第一个匹配值 | lst.remove(3) |
| 弹出 | .pop() | 移除并返回指定位置元素 | lst.pop(0) |
| 连接 | + | 拼接多个列表 | lst1 + lst2 |
| 重复 | * | 重复列表元素 | lst * 2 |
| 成员检查 | in | 判断元素是否在列表中 | 3 in lst → True/False |
| 长度 | len() | 获取列表元素数量 | len(lst) |
| 排序 | .sort() | 原地排序(升序/降序) | lst.sort(reverse=True) |
| 反转 | .reverse() | 原地反转列表顺序 | lst.reverse() |
| 计数 | .count() | 统计元素出现次数 | lst.count(2) |
| 查找索引 | .index() | 返回元素首次出现的索引 | lst.index('x') |
| 清空 | .clear() | 移除所有元素 | lst.clear() |
| 复制 | .copy() | 生成浅拷贝 | new_lst = lst.copy() |
-
pop() 是列表方法,通过索引删除元素并返回被删除的元素,如果不指定索引,则删除并返回列表最后一个元素。
-
remove() 是列表方法,通过值删除列表中第一个匹配的元素,返回None。
-
list() 等同于 str.split()
s = 'spam'
t1 = list(s)
t2 = s.split()
- str.join() 将列表中的元素连接成一个字符串
对象引用
引用是指一个变量指向内存中的某个对象。
- 变量通过引用与对象关联,而不是直接存储对象本身。
- 对不可变对象(比如字符串)的引用会指向相同对象,而对可变对象(比如列表)的引用则会指向不同对象。
– 不可变对象:数字、字符串、元组、布尔值
– 可变对象:列表、字典、集合
# %%
a = [1, 2, 3]
b = a
a is b
# True
# %%
a = [1, 2, 3]
b = [1, 2, 3]
a is b
# False
列表作为函数参数
def delete_head(t):
del t[0]
- 在把列表作为参数传递中,一定要区分函数内修改列表元素(返回None)和创建新列表(返回新列表)这两种不同的操作。
t1 = [1,2]
t2 = t1.append(3)
# 这里是对t1做修改,所以t1 = [1,2,3] t2 = None
元组
元组定义
- 一类序列数据类型
- 元素可以是任何数据类型
- 通过圆括号()定义,元素之间用逗号分隔 `
mix_tuple = (1,"hello",3.14,True)
** 逗号创建元组:逗号是元组的真正构造器
** 圆括号可选:圆括号主要用于提高可读性,或者在需要消除歧义时使用
t1 = 'a',
# 正确构建元组
t2 = ('a')
# 构建的是字符串
元组特点
- 元组元素不可变:元组元素无法通过赋值改变
- 不过可以基于旧元组,生成新元组
在这里插入代码片
old_tuple = (1, 2, 3)
# 基于旧元组生成新元组:拼接元素
new_tuple = old_tuple + (4, 5)
print(new_tuple) # 输出:(1, 2, 3, 4, 5)
元组方法
元组一旦创建后就不能被修改。因此,元组的方法通常不会直接修改元组本身,而是会返回一个新元组或其他类型的值。
以下是Python元组(tuple)的常用方法总结,由于元组是不可变类型,其方法相对较少,主要以查询和统计为主:
元组常用方法表
| 方法名 | 描述 | 示例 | 返回值 |
|---|---|---|---|
count(x) | 统计元素x的出现次数 | t = (1,2,2,3); t.count(2) | 2 |
index(x) | 返回元素x首次出现的索引 | t = ('a','b','c'); t.index('b') | 1 |
index(x, start, end) | 在指定范围内查找元素x | t = (1,2,3,2); t.index(2, 2) | 3 |
补充说明
- 元组没有
append()、extend()、remove()等方法,因其不可变性 - 可通过
len()、max()、min()等内置函数操作元组 - 支持切片操作:
t = (1,2,3); t[1:]返回(2,3)
my_tuple = (1, 2, 3)
# 使用元组解包为多个变量赋值
a, b, c = my_tuple

被折叠的 条评论
为什么被折叠?



