[TOC]
基本数据结构
下标
- 使用下标(也称为索引)来访问字符串、列表、元组等序列类型中的单个元素
- 正向下标从最左边的元素开始计数,以0为起始点
- 负向下标从最右边的元素开始计数,以-1为最右边的元素的下标
示意图
正向下标: 0 1 2 3 4 5
字符串: 'P' 'y' 't' 'h' 'o' 'n'
负向下标: -6 -5 -4 -3 -2 -1
示例
s = 'python'
# 访问字符串的第三个元素
print(s[2]) # ---输出元素为 t
print(s[-4]) # ---输出元素为 t
字符串str
字符串切片
- 从字符串中提取部分字符,选取的区间是左开右闭:从起始位开始,到结束位的前一位,不包含结束位本身
语法格式
string[start:stop:step]
* start:可选参数,表示切片开始位置的下标(包含),不写的话默认是从头开始
* stop:必填参数,表示切片结束位置的下标(不包含)
* step:可选参数,表示步长,不写的话默认为1
示例
s = "Hello, world!"
print(s[:5]) # 输出 "Hello",从索引0开始到4结束
print(s[7:]) # 输出 "world!",从索引7开始到字符串末尾,符号和空格也占位
print(s[::2]) # 输出 "Hlo ol!",步长为2,从字符串开始到最后,每隔一个字符取一个
print(s[-5:-1]) # 输出"orld",倒序截取,从-5个字符
find()
- str.find() 方法用于检测字符串中是否包含子字符串
基本语法
字符串序列.find(子字符串,开始位置下标,结束位置下标)
str.find(substring,start,end)
* 如果find()内指定了start和end范围,则返回子字符串第一次出现的位置(下标),否则返回 -1
* start 开始位置下标和end 结束位置下标可以省略,表示在整个字符串序列中查找
示例
text = "Hello, world! Welcome to the Python programming world."
# 查找子字符串 "world"
position = text.find("world")
print(position) # 输出 7,返回的是子串在字符串当中开始位置的索引
# 查找子字符串 "world",但只在索引位置 20 后面查找
position = text.find("world", 20)
print(position) # 输出 48
# 查找子字符串 "world",但在索引位置 20 到 30 之间查找
position = text.find("world", 20, 30)
print(position) # 输出 -1,因为在给定的范围内没有找到 "world"
replace()
- str.replace()方法用于将字符串中的某个子串替换成另一个子串
基本语法
字符串序列.replace(旧子串,新子串,替换次数)
str.repalce(old,new,count)
* count:可选参数,默认为-1,表示替换所有匹配的子串
* 替换次数如果超出子串出现的次数,则替换次数为该子串出现的次数
示例
text = "hello world, hello python"
new_text = text.replace("hello", "hi")
print(new_text) # 输出: hi world, hi python,字符串内所有的子字符串hello都替换为hi
# 如果只想替换第一次出现的 "hello"
new_text = text.replace("hello", "hi", 1)
print(new_text) # 输出: hi world, hello pyhon
# 替换次数超过了子串的次数
new_text = text.replace("hello", "hi", 3)
print(new_text) # 输出: hi world, hi pyhon,只替换hi子串出现的2次次数
split()
- str.split()方法用于根据指定的分隔符将一个字符串分割成多个子字符串,并返回一个这些子字符串组成的列表
- 如果没有指定分隔符,默认情况下它会按照空白字符进行分割
基本语法
字符串序列.split(分隔符,最大拆分次数)
string.split(separator, maxsplit)
* separator:可选参数,如果省略该参数或传入 None,则以空白字符作为分隔符
* maxsplit:可选参数,用于指定最多分割几次,默认为-1,表示拆分所有匹配的分隔符
* 如果分割字符是原有字符串中的子串,分割后则会丢失该子串
示例
text = "Hello, World! How are you?"
# 使用逗号作为分隔符拆分字符串
words = text.split(", ")
print(words) # 输出:['Hello', 'World! How are you?'],拆分为2个字符串
# 使用空格作为分隔符拆分字符串
words = text.split()
print(words) # 输出:['Hello,', 'World!', 'How', 'are', 'you?'],拆分为5个字符串
# 使用空格作为分隔符拆分字符串,最多拆分 2 次
words = text.split(" ", 2)
print(words) # 输出:['Hello,', 'World!', 'How are you?'],拆分为3个字符串
# 使用are作为分隔符拆分字符串
words = text.split("are")
print(words) # 输出:['Hello, World! How ', ' you?'],are丢失
strip()
- strip()方法用于删除字符串两端的指定字符
- lstrip():删除字符串左侧指定字符
- rstrip():删除字符串右侧指定字符
基本语法
字符串序列.strip(指定字符)
string.strip(chars)
示例
text = " Hello, World! "
# 删除字符串两端的空白字符
new_text = text.strip()
print(new_text) # 输出:Hello, World!
# 删除字符串两端的指定字符
new_text = text.strip("Hello, !")
print(new_text) # 输出:World
startswith()
- statrswith()方法用于检查字符串是否以指定子串开头,是返回True,否则返回False
基本语法
字符串序列.startswith(子串,开始位置下标,结束位置下标)
string.startswith(prefix,start,end)
示例
text = "Hello, World!"
print(text.startswith('Hell')) # 输出为True,开头匹配Hello
print(text.startswith('Hello,5,-1')) # 输出为False,5号索引开始到结尾不匹配Hello开头
endswith()
- endswith()方法用于检查字符串是否以指定子串结尾,是返回True,否则返回False
基本语法
字符串序列.endswith(子串,开始位置下标,结束位置下标)
string.endswith(prefix,start,end)
示例
text = "Hello, World!"
print(text.endswith('!')) # 输出为True,结尾匹配!
print(text.endswith('old!,0,7')) # 输出为False,0号索引开始到7号索引不匹配old!结尾
字符串反转
- 使用字符串切片,步长为-1时可以用来反转一个序列或者从序列的末尾开始访问元素
- [::-1]表示从序列的开始到结束,步长为-1,即反向遍历整个序列
示例
text = "Hello, World!"
reversed_text = text[::-1]
print(reversed_text) # 输出:!dlroW ,olleH
列表list
index()
- index()用来返回数据所在位置的下标,除了用于列表,也可用于字符串和元祖
- 如果查找的元素不在序列中,则会返回
ValueError
异常 - 如果列表或字符串中有重复的元素或子串,index() 方法只会返回第一个匹配项的索引
基本语法
列表序列.index(数据,开始位置的下标,结束位置的下标)
list.index(element,start,end)
* element:要查找的元素
* start:可选参数,查找的起始位置,默认为0
* end:查找的结束位置,默认为列表的末尾
* 当指定 start 和 end 参数时,index() 方法会在 [start, end) 范围内查找,即包括 start 但不包括 end
示例
my_list = ['apple', 'banana', 'cherry', 'date', 'fig']
print(my_list.index('cherry')) # 输出:2
# 查找从位置 1 开始到位置 4 结束的子列表中 'banana' 的位置
index_of_banana = my_list.index('banana', 1, 4)
print(index_of_banana) # 输出:1
# 查找从此那个1到4结束的子列表中 'fig' 的位置
index_of_fig = my_list.index('fig', 1, 4)
print(index_of_fig) # 输出:ValueError: 'fig' is not in list 。fig所处位置为第4,不在列表内,结束位置为4不包括4
# 查找列表中重复元素的索引
list1 = ['apple', 'banana', 'cherry', 'banana', 'date', 'fig']
print(list1.index('banana')) # 输出:1,只返回第一个元素的索引
count()
- count():统计指定数据在当前列表中出现的次数,除了用于列表,也可用于字符串和元祖
- count() 方法不会改变原始序列的内容,只是返回计数的结果
- 如果要计数的元素或子字符串不存在于序列中,count() 方法将返回 0
基本语法
列表序列.count(数据)
list.count(element)
示例
fruits = ['apple', 'banana', 'apple', 'orange', 'banana', 'banana']
print(fruits.count('banana')) # 输出:3
len()
- len()可以获取列表的长度,即列表中数据的个数
示例
lst = [1, 2, 3, 4, 5]
print(len(lst)) # 输出:5
增加
append()
- append():列表尾部增加数据
- append() 方法只接受单个参数,并将其作为一个整体添加到列表的末尾
- 如果参数本身是一个列表或元组,那么整个列表或元组将被作为一个元素添加
基本语法
列表序列.append(数据)
list_name.append(item)
示例
list1 = [1, 2, 3]
list2 = [4, 5, 6]
print(list1.append(list2)) # 输出:[1, 2, 3, [4, 5, 6]]
insert()
- insert():指定位置新增数据
- append() 只能在列表的末尾添加元素,而 insert() 允许你在列表中的任意位置插入元素
基本语法
列表序列.insert(位置下标,数据)
list_name.insert(index,item)
示例
letters = ['a', 'b', 'c', 'd']
letters.insert(2, 'z') # 在索引 2 的位置插入 'z'
print(letters) # 输出:['a', 'b', 'z', 'c', 'd']
extend()
- extend():列表结尾追加数据,如果数据是一个序列,则将这个序列的数据逐一加入到列表中
基本语法
列表序列.extend(数据)
list_name.extend(iterable)
示例
first_list = [1, 2, 3]
second_list = ['a', 'b', 'c']
first_list.extend(second_list)
print(first_list) # 输出:[1, 2, 3, 'a', 'b', 'c']
删除
del()
- del():一个语句,非函数和方法。用于从程序中删除对象的引用,从而让Python的垃圾回收机制有机会释放不再需要的内存
示例
# 删除变量
x = 10
print(x) # 输出:10
del x
# print(x) # 这里会抛出NameError,因为x已经被删除了
# 删除列表中的元素
my_list = [1, 2, 3, 4, 5]
del my_list[2] # 删除索引为2的元素
print(my_list) # 输出:[1, 2, 4, 5]
remove()
- remove():用于移除列表中第一个匹配指定值的元素
- 如果列表中不存在这样的元素,remove() 方法会抛出一个 ValueError 异常
基本语法
列表序列.remove(数据)
list.remove(value)
示例
fruits = ['apple', 'banana', 'cherry', 'date', 'banana']
fruits.remove('banana')
print(fruits) # 输出: ['apple', 'cherry', 'date', 'banana']
numbers = [1, 2, 3]
numbers.remove(4) # 这将抛出 ValueError: list.remove(x): x not in list
pop()
- 删除指定下标的数据(默认为最后一个),并返回该数据
基本语法
列表序列.pop(下标)
item = list.pop(index)
示例
fruits = ['apple', 'banana', 'cherry']
last_fruit = fruits.pop()
print(last_fruit) # 输出: 'cherry'
print(fruits) # 输出: ['apple', 'banana']
修改
修改指定下标数据
示例
my_list = [10, 20, 30, 40, 50]
# 修改第三个元素为35
my_list[2] = 35
print(my_list) # 输出: [10, 20, 35, 40, 50]
reverse()
- reverse():反转列表元素顺序,直接在原地修改列表,而不是返回一个新的列表
- reverse() 只能用于列表,不能用于字符串、元组或其他序列类型
基本语法
列表序列.reverse()
list_name.reverse()
示例
numbers = [1, 2, 3, 4, 5]
numbers.reverse()
print(numbers) # 输出: [5, 4, 3, 2, 1]
sort()
- sort():对列表中的元素进行排序。它可以按照升序(默认)或降序排列列表中的元素
基本语法
列表.sort(key=None,reverse=False)
示例
numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
numbers.sort()
print(numbers) # 输出: [1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]
# 按降序排序
numbers.sort(reverse=True)
print(numbers) # 输出: [9, 6, 5, 5, 5, 4, 3, 3, 2, 1, 1]
# 使用 key 参数按绝对值排序
numbers = [-5, -1, 2, -3, 4]
numbers.sort(key=abs)
print(numbers) # 输出: [-1, 2, -3, 4, -5]
join()
- join():一个字符串的方法,用于将一个包含字符串元素的可迭代对象(如列表或元组)连接成一个单独的字符串
- 每个元素之间会插入调用 join 的字符串作为分隔符
基本语法
separator = 'some string'
result = separator.join(iterable)
* separator 是你想要用作分隔符的字符串
* iterable 是一个包含字符串元素的可迭代对象,如列表或元组
* join() 方法返回一个新的字符串,其中包含 iterable 中的所有元素,每个元素之间由 separator 字符串分隔。
示例
# 使用列表
words_list = ['Hello', 'world', '!']
sentence = ', '.join(words_list)
print(sentence) # 输出: Hello, world, !
# 使用元组
words_tuple = ('Python', 'is', 'awesome')
phrase = ' '.join(words_tuple)
print(phrase) # 输出: Python is awesome
列表的循环遍历
for循环
- 适用于绝大多数情况,最简单直观
示例
my_list = ['apple', 'banana', 'cherry']
for item in my_list:
print(item)
enumerate()
- 如果还需要知道当前元素的索引,可以使用 enumerate() 函数
示例
for index, value in enumerate(my_list):
print(f"Index: {index}, Value: {value}")
# 输出类似以下的结果:
Index: 0, Value: apple
Index: 1, Value: banana
Index: 2, Value: cherry
while循环
- 很少使用,需要控制更复杂的循环条件时可以使用
示例
index = 0
while index < len(my_list):
print(my_list[index])
index += 1
列表嵌套
- 列表嵌套指的是一个列表里面包含了其他的子列表
示例
nested_list = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
print(nested_list[0][2]) # 输出: 3
列表推导式
- 使用一行代码简单快速的创建一个列表
基本语法
[表达式 for 变量 in 列表] 或者 [表达式 for 变量 in 列表 if 条件]
new_list = [expression for item in iterable if condition]
* expression: 这是你想要添加到新列表中的项的表达式,通常涉及当前循环变量 item
* item: 是可迭代对象 iterable 中的每一个元素
* iterable: 可以被迭代的对象,如列表、元组、集合、字符串
* if condition: 这是可选部分,用于过滤 iterable 中的元素,只有满足条件的元素才会被添加到新列表中。
示例1
# 创建一个列表,其中只包含1到10之间既是偶数又大于5的数字:
result = [num for num in range(1, 11) if num > 5 and num % 2 == 0]
print(result) # 输出: [6, 8, 10]
示例2
# 有两个列表,想要创建一个新列表,其中包含所有可能的配对:
list_a = [1, 2, 3]
list_b = ['a', 'b']
pairs = [(x, y) for x in list_a for y in list_b]
print(pairs) # 输出: [(1, 'a'), (1, 'b'), (2, 'a'), (2, 'b'), (3, 'a'), (3, 'b')]
- 如果想要加入
if...else
条件时,列表推导式的语法变为:
语法
[表达式真 if 变量 else 表达式假 for 变量 in 列表]
[expression_if_true if condition else expression_if_false for x in iterable]
* expression_if_true 和 expression_if_false 分别是在条件为真和为假时要使用的表达式
* 标准的 Python 列表推导式只允许一个 if-else 结构,无法直接嵌套多个独立的 if-else
示例
# 对于 numbers 列表中的每一个元素 num,如果 num 大于 0,则 num 被乘以 2;否则,num 保持不变
numbers = [-1, 2, -3, 4, -5]
result = [num * 2 if num > 0 else num for num in numbers]
print(result) # 输出: [-1, 4, -3, 8, -5]
- 如果需要使用多个
if
语句,列表推导式的语法变为:
语法
[表达式 for 变量 in 列表 if 条件1 and 条件2]
[expression for item in iterable if condition1 and condition2 and ...]
示例
numbers = [1, 2, 3, 4, 5, 6, -2, -4]
filtered_numbers = [num for num in numbers if num > 0 and num % 2 == 0]
print(filtered_numbers) # 输出: [2, 4, 6]
元组tuple
- 元祖与列表类似,只是元组内数据不支持修改,列表是允许的
基本语法及特性
- 定义:使用圆括号 () 来创建元组,例如:my_tuple = (1, 'hello', 3.14)
- 索引:可以使用索引访问元组中的元素,例如:first_element = my_tuple[0]
- 切片:可以使用切片来获取元组的一部分,例如:sub_tuple = my_tuple[1:3]
- 不可变性:元组的元素一旦被赋值后就不能改变,尝试修改会引发错误
- 用途:元组常用于存储相关的数据项,如坐标 (x, y) 或者日期 (year, month, day) 等
示例
# 创建一个元组
coordinates = (10, 20)
# 访问元组中的元素
x = coordinates[0]
y = coordinates[1]
# 输出元组中的元素
print("x =", x)
print("y =", y)
- 元祖内含有列表或者字典数据,修改列表或字典内数据是支持的
示例
# 创建一个包含列表的元组
my_tuple = ([1, 2, 3], 'hello', 3.14)
# 访问元组中的列表
list_in_tuple = my_tuple[0]
# 修改列表中的数据
list_in_tuple.append(4)
list_in_tuple[0] = 99
# 输出修改后的列表
print(list_in_tuple) # 输出: [99, 2, 3, 4]
字典dict
- 字典用{}表示,用于存储键值对集合
- 字典是无序的,也就是说,元素不会按照特定顺序排列,而是基于键来访问
示例
# 有数据的字典
dict1 = {'name':'jake','age':20,'gender':'男'}
# 空字典
dict2 = {}
# dict()构造函数
dict3 = dict()
增加
直接赋值
写法
字典序列[key] = 值
示例
my_dict = {} # 创建一个空字典
my_dict['new_key'] = 'new_value' # 添加一个新的键值对
print(my_dict) # 输出: {'new_key': 'new_value'}
使用update()方法
- update() 方法允许你使用另一个字典或任何可迭代对象来更新现有字典
示例
my_dict = {'key1': 'value1'}
new_items = {'key2': 'value2', 'key3': 'value3'}
my_dict.update(new_items)
print(my_dict) # 输出: {'key1': 'value1', 'key2': 'value2', 'key3': 'value3'}
修改字典
- 修改字典非常简单,只需要指定键并赋新值即可
示例
my_dict['key1'] = 'new_value' # 修改 'key1' 的值
删除字典元素
- 可以使用 del 语句来删除字典中的元素
示例
del my_dict['key1'] # 删除 'key1' 键及其对应的值
- 如果要清空整个字典,可以使用 clear() 方法
示例
my_dict.clear() # 清空字典
访问字典
- 访问字典中的值是通过
key
来完成的
示例
value = my_dict['key1'] # 返回与 'key1' 关联的值
* 如果键不存在于字典中,上述代码会抛出 KeyError
- get()
基本语法
# 如果当前不存在这个key,则会返回第二个参数自定义的默认值,如果没有第二个参数,则返回默认的None
dict.get(key,默认值)
示例
my_dict = {'name': 'Alice', 'age': 25}
# 获取存在的键
name = my_dict.get('name')
print(name) # 输出: Alice
# 尝试获取不存在的键,没有提供默认值
city = my_dict.get('city')
print(city) # 输出: None
# 尝试获取不存在的键,提供默认值
city = my_dict.get('city', 'Unknown')
print(city) # 输出: Unknown
遍历字典
遍历键
示例
my_dict = {'name': 'Alice', 'age': 25}
for key in my_dict.keys():
print(key)
遍历值
示例
for value in my_dict.values():
print(value)
同时遍历键和值
示例
# 使用items()方法遍历字典的键值对
for key, value in my_dict.items():
print(key, value)
- THE END -
最后修改:2025年8月1日
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:https://www.qian777.cn/72.html
共有 0 条评论