python基础

A
admin
|
|
154 次阅读
|
python基础
Python是解释型、跨平台的高级通用编程语言,支持面向对象、过程式、函数式等多种编程范式,版本分为已停止维护的Python 2.x和当前主流的Python 3.x;应用场景覆盖Web开发、数据分析、人工智能、自动化运维、网络爬虫、桌面GUI开发等领域,凭借内置标准库和丰富的第三方库生态,既能满足轻量化脚本编写,也可支撑大型工业级项目开发,语法简洁易上手,是全场景通用的主流开发语言。

一、python的注释

1、为什么需要注释?

想象你写了一篇日记,过了半年再看,可能不记得当时为什么写这段话。代码也是一样。

  • 给自己看:比如你写了一段复杂的代码,过几天再打开时,注释能帮你快速回忆起“这里为什么要这么写”。
  • 给别人看:如果别人需要用你的代码(比如同学、同事),注释就像“使用说明书”,让对方不用猜你的逻辑。

2、注释长什么样?怎么写?

Python的注释用于解释代码逻辑、提高可读性,不影响程序执行。

2.1 单行注释:给一行代码“贴便利贴”

  • # 开头,后面写文字,电脑会自动跳过 # 后的内容。
  • 👉例子:
PYTHON
print("今天天气真好")  # 这行代码的作用是:在屏幕上显示“今天天气真好”
  • 就像你在笔记本上写:
TEXT
买牛奶  # 记得买低脂的

2.2 多行注释:给一大段代码“写说明书”

  • '''(三个单引号)或 """(三个双引号)把一段话包起来,适合写长注释。
  • 👉例子:
PYTHON
"""
下面这段代码的作用:
1. 记录今天吃了什么
2. 统计一共吃了几种食物
"""
food = ["苹果", "米饭", "牛肉"]
print("今天吃了", len(food), "种食物")
  • 相当于你在笔记本上写:
TEXT
【周末计划】
- 上午:去公园跑步
- 下午:看电影
- 晚上:做饭

2.3 注释的小 tips

  • 简洁清晰:注释应解释“为什么做”,而非“做了什么”(代码本身已说明后者)。
  • 避免冗余:不要注释显而易见的代码(如 x = x + 1 # x自增1)。
  • 保持更新:代码修改时,同步更新注释,避免“过时注释”误导读者。
  • 文档化注释:对公开函数/类必须写 docstring,方便他人使用(可配合工具如 Sphinx 生成文档)。
  • 临时注释:调试时可用 # 快速注释多行代码(推荐用 IDE 的批量注释功能)。

简单说就是:

  1. 别写“废话”:比如 x = 1 + 1 # 把1和1加起来,这种注释不如不写(代码本身已经很清楚了)。
  2. 写“为什么”,不是“是什么”:比如代码是 if age > 18: ...,注释可以写 # 这里判断是否成年,因为未成年不能购买,而不是 # 如果年龄大于18。
  3. 像写便签一样简洁:别写长篇大论,抓住重点即可~

3、总结

  • Python 注释通过 #、'''/""" 实现单行/多行说明,核心价值是提升代码可读性和可维护性
  • 简单说:注释就是代码的“翻译官”和“备忘录”,电脑不看,只给人看,目的是让代码更好懂。刚开始写代码时养成写注释的习惯,以后无论是自己回顾还是和别人合作,都会轻松很多~ 😊

二、常用快捷键

  • 复制 ctrl + c
  • 粘贴 ctrl + v
  • 撤回 ctrl + z
  • 剪切 ctrl + x
  • 注释 shift + 3 ==> #
  • 输入法中英文输入状态切换 shift 或者 ctrl + 空格
  • 快速往下复制1行 Ctrl + D
  • 快速注释或者快速打开注释 Ctrl + /
  • 多行修改 Alt + Shift + 鼠标拖动

三、变量

Python中的“变量与赋值”可以理解为 “给数据贴标签”,就像给盒子贴标签方便存放和查找东西一样。

1、变量:给数据起个名字

1.1 什么是变量?

变量就是一个 “容器”,用来存放数据(比如数字、文字、列表等),并给这个容器起一个名字。

👉 类比:你有一个盒子,贴上标签“零花钱”,里面放了100元。这里的 “零花钱”就是变量名,100元就是变量的值。

1.2 如何创建变量?(赋值操作)

  • 用 = (赋值符号)把数据“装进”变量,格式:变量名 = 数据。
  • 👉例子:
PYTHON
age = 18  # 变量名为age,存放的数据是18(整数)
name = "小明"  # 变量名为name,存放的数据是"小明"(字符串,用引号包裹)
height = 1.75  # 变量名为height,存放的数据是1.75(浮点数/小数)

就像

TEXT
零花钱 = 100元  
姓名 = "小明"  
身高 = 1.75米

2、变量命名规则(必须遵守!)

变量名就像“标签”,不能随便起,有几个简单规则:
1. 只能包含:字母、数字、下划线(_),且 不能以数字开头。

❌ 错误:1name(以数字开头)、my-name(含减号)

✅ 正确:name1、my_name、student_age
2. 区分大小写:ageAge 是两个不同的变量。

PYTHON
age = 18  
Age = 20  
print(age)  # 输出18(不是20)
  1. 不能用Python关键字(比如 if、for、print 等,这些是Python自带的“特殊标签”)。

    ❌ 错误:if = 5(if是关键字,不能当变量名)

  2. 建议:见名知意

    变量名最好能直接看出存放的数据是什么,比如用 age 存年龄,score 存分数,而不是 a、b、x 这种无意义的名字。

3、变量的核心特性:可以随时“修改内容”

变量的值不是固定的,可以用新的赋值语句覆盖旧值,就像“把盒子里的东西换成新的”。

👉例子

PYTHON
money = 100  # 一开始有100元  
money = 200  # 现在把钱改成200元(覆盖旧值)  
print(money)  # 输出200(不是100)

甚至可以用 变量本身 来更新值:

PYTHON
count = 0  
count = count + 1  # 把count原来的值(0)加1,再存回count  
print(count)  # 输出1(相当于“计数器+1”)

4、变量的“类型”:存放不同种类的数据

变量可以存放不同类型的数据,Python会自动识别类型(无需手动声明)

类型 例子 说明
整数(int) age = 18、num = -5 不带小数点的数字
字符串(str) name = "小明"、msg = 'Hi' 文本,用单/双引号包裹
浮点数(float) height = 1.75、pi = 3.14 带小数点的数字
布尔值(bool) is_student = True、has_money = False 只有True(是)/False(否)

👉可以用 type(变量名) 查看变量类型:

PYTHON
x = 10  
print(type(x))  # 输出 <class 'int'>(表示x是整数类型)

5、常见问题:“赋值”不是“等于”

注意:Python中的 = 是 “赋值符号”,不是数学中的“等于号”!

数学中 x = x + 1 不成立(x不可能等于x+1),但Python中表示“用x原来的值加1,再存回x”(比如计数器场景)。
如果想判断两个值是否相等,用 ==(双等号),比如 x == 10(判断x的值是不是10)。

6、总结

  • 变量:给数据起的名字,像贴了标签的盒子。
  • 赋值:用 变量名 = 数据 把数据放进盒子,可随时更新。
  • 核心:记住命名规则(字母/数字/下划线,不能以数字开头),见名知意,理解 = 是“赋值”而非“等于”。

四、数据类型的可变性和不可变性

定义

✅不可变数据类型:创建后无法修改其内容,修改时会生成新的对象并分配新内存地址。
✅可变数据类型:创建后可直接修改内容,内存地址不变(除非重新赋值)。

维度 不可变类型 可变类型
内存地址 修改时地址改变(新对象) 修改时地址不变(原对象)
可哈希性 可哈希(可作为字典键/集合元素) 不可哈希(不可作为字典键)
性能 读取快,修改开销大 修改快,内存占用较稳定
线程安全 天然线程安全(无修改竞争) 非线程安全(需加锁保护)

典型应用场景

  • 不可变类型
  • 存储固定配置(如常量、元组坐标)。
  • 作为字典键(如字符串键名)。
  • 函数参数传递(避免外部修改)。
  • 可变类型
  • 动态数据集合(如列表存储日志、字典存储用户信息)。
  • 需要频繁修改的数据(如集合去重、列表排序)。

五、数据类型的常用操作及方法

1、字符串类型

字符串(str)是文本数据的容器,用单引号' '、双引号" " 或 三引号''' '''/""" """ 包裹。

1.1 字符串的定义及注意点

类型: str
作用:记录一些描述性的数据,比如,名字、性别、家庭住址、公司简介……

定义:在引号内按照从左往右的顺序包含一个个字符,可以使用单引号、双引号和三引号,注意三引号可以换行

👉例如

PYTHON
# 定义字符串
strings = '人生苦短,我用python!'
strings2 = "人生苦短,我用python!"
strings3 = '''人生苦短,
                我用python!'''
strings4 = """人生苦短,
                我用python!"""

# 打印输出
print(strings, strings2, strings3, strings4)
print(id(strings), id(strings2), id(strings3), id(strings4))
print(type(strings), type(strings2), type(strings3), type(strings4))

⚠️注意点:

PYTHON
# 需要注意的情况,就是字符串内外都含引号的时候(字符串本身就是带引号)  人生苦短,我用'python'!
# print('人生苦短,我用'python'!')
# strings5 = '人生苦短,我用'python'!'
# strings5 = "人生苦短,我用'python'!"
print("人生苦短,我用'python'!")

👉字符串拼接

PYTHON
# 字符串的拼接  "人生苦短"  "我用'python'!"
print("人生苦短" + "我用'python'!")
print("5" + "20")
print("人生苦短" * 10)
print("人生苦短" + "人生苦短" + "人生苦短" + "人生苦短" + "人生苦短" + "人生苦短" + "人生苦短")

👉字符串的索引(可正可负)

PYTHON
# 字符串的索引
strings6 = 'abcde'
# 索引       0 1 2 3 4   索引 从0开始
#            -5  -4 -3 -2 -1

print(strings6[0])
print(strings6[1])
print(strings6[2])
print(strings6[3])
print(strings6[4])

print("-----------------------")
print(strings6[-1])
print(strings6[-2])
print(strings6[-3])
print(strings6[-4])
print(strings6[-5])

👉字符串不可索引修改

PYTHON
# 捕获异常机制
try:
    strings6[0] = 'q'
except Exception as e:
    print(e)

👉字符串的格式化输出
程序中经常会有这样场景:要求用户输入信息,然后打印成固定的格式

比如要求用户输入用户名和年龄,然后打印如下格式:
==> My name is xxx,my age is xxx.

这就用到了占位符,如:%s%d%i%f……

👉例子

PYTHON
# %s
name = input('请输入您的名字:')
# 一个值的话直接放到%后面
# %s 占位符
print("My name is xxx,my age is %s" % name)

# %d/%i
# 多个值的话直接放到%后面,要括号
age = input('请输入您的年龄:')
print("My name is %s, my age is %d" % (name, int(age)))  # 注意类型转换
print("My name is %s, my age is %i" % (name, int(age)))  # 注意类型转换

# %f 占位符默认显示 6位小数
print("小数 %f" % 1.0001)
# 需要调整小数位数,可通过 %.nf 格式指定(n 为数字),例如 %.2f 显示2位小数。
print("指定小数位: %.2f" % 1.0001)

📌图示:

image-20250731131616559

1.2 字符串的相关操作

1.2.1 索引取值
PYTHON
# 1、索引取值
msg = '人生苦短 我用python'
print(msg[0])
1.2.2 切片操作

通过 [start:end:step] 截取子串(左闭右开,step 为步长)

PYTHON
# 2、切片(顾头不顾尾)(左闭右开区间)查找字符串当中一段值   [起始值:终止值:步长] 索引值
# 步长:默认为1,此时可以省略,用于控制提取字符的间隔  不能为0
# 切黄瓜 一节一节
print(msg[0:5])
print(msg[0:5:1])
print(msg[0:5:2])
# 提取不会改变原值
print(msg)

# 如果省略起始值,默认字符串开头(索引0)开始
# 如果省略终止值,默认到字符串末尾结束
# 如果省略步长,默认步长为1 为正数  从左往右取
print(msg[::])
print(msg[0::])
print(msg[0::2])

# 步长是负数  # 从右向左提取字符,反向提取
# msg = 'hello world'
print(msg[::-1])
print(msg[10::-1])
print('-------------')
print(msg[10:5:-1])
print(msg[5:10:-1]) # 取不到值,没有值
print(type(msg[5:10:-1])) # 空字符串
1.2.3 计算字符串长度 len()
FPYTHON
#3、长度len方法 可以计算长度
print(len(msg))
1.2.4 成员运算 innot in

判断一个字符串是否存在于另一个大的字符串中

PLAINTEXT
# 4、成员运算  in 和 not in: 判断子字符串是否存在于另一个大的字符串中
# 返回类型 布尔 True False
print('linmo' in 'linmo is dsb')
print('xialuo' not in 'linmo is dsb')
1.2.5 字符串的增、删、改、查

🔹

PYTHON
# 增
# 字符串拼接
print('linmo'+'dsb')

# join
str1 = '真正的勇士'
str2 = '敢于直面惨淡的人生'
str3 = '敢于正视淋漓的鲜血'
# 可以把列表的元素组合成字符串
print(''.join([str1,str2,str3]))
print(','.join([str1,str2,str3]))
print('哇塞'.join([str1,str2,str3]))
# 空格也属于字符
print('   '.join([str1,str2,str3]))

🔹删

PYTHON
# 删
name1 = 'dahai'
del name1
print(name1)

🔹改常用方法

lower() 全小写

upper()全大写

capitalize()仅首字母大写

title()每个单词首字母大写

split()分割字符串(返回列表)

strip()去除两端空白

lstrip()去除左端空白

rstrip()去除右端空白

replace() 替换子串

center()居中对齐,两侧填充空格

ljust() 留左填右

rjust() 留右填左

PYTHON
# 改   字符串底层是不可变的数据类型,直观体现不能通过索引直接改里面字符的值, 但可以间接修改(比如说替换)
# 1、字符串字母变大写和变成小写 lower,upper
msg1 = 'abc'
msg2 = msg1.upper() # 变大写
# 原值
print(msg1)
print(msg2)
print(id(msg1))
print(id(msg2))
# 注意字符串进行改变需要重新赋值,所以它也是不可变类型,它的原值的变量不会变,
# 只是做了一个方法改变了它的值,但是这个值并不是在原来的基础上改的,而是重新赋值给一个新的变量

# 2、把第一个字母转换成大写 capitalize
lettter = 'abcd'
print(lettter.capitalize())
# 3、每个单词的首字母进行大写转换 title
letter_msg = 'hello world'
print(letter_msg.title())

# 4、把字符串切分成列表  split 默认空格字符切分
msgg = 'hello world python'
# 默认以空格切分
print(msgg.split())
# 可以切分你想要的字符 比如*
msgg1 = 'hello*world*python'
print(msgg1.split('*'))
#切分split的作用:针对按照某种分隔符组织的字符串,可以用split将其切分成列表,进而进行取值
msggg = 'root:123456'
print(msggg[0:4])
print(msggg.split(':')[0])
print(msggg.split(':')[1])

#5、去掉字符串左右两边的字符 strip 不写默认是空格字符,不管中间的其他的字符
user = '       dahai    '
print(user)
print(user.strip())
# name = input('请输入用户名').strip()
# print(name)

# 字符串的替换 replace()
# 1、基本替换
s = 'Hello World!'
new_s = s.replace('Hello','Hi')
print(new_s)
# 2、替换所有匹配的字符串
s = '不吃香菜  真爱粉  不吃香菜  两年半'
# 将所有'不吃香菜'替换成'个人练习生'
new_s = s.replace('不吃香菜', '个人练习生')
print(new_s)
# 3、指定替换次数
s = 'apple banana apple cherry apple'
# 只替换前两个'apple'
new_s = s.replace('apple','orange',2)
print(new_s)
# 4、替换空字符串
s = 'Hello, World!'
# 删除所有逗号
new_s = s.replace(',','')
print(new_s)

# 了解
# center,ljust,rjust 多余添加自己想要的字符 l ->left左 r ->right右
print('dahai'.center(11,'a')) # 总共有11个字符       -> 11字符
print('dahai'.ljust(11,'*'))  # 留左填右
print('dahai'.rjust(11,'*'))  # 留右填左

🔹查

PYTHON
# 查
#1、find,index
# 查找子字符串在大字符串的哪个位置(起始索引)
msga = 'hello dahai is dsb dahai'
print(msga.find('dahai')) # 索引值
# 没找到会返回-1
print(msga.find('ddddd'))
print(msga.index('dahai'))
# 没找到会报错
# print(msga.index('ddddd'))
# 统计一个子字符串在大字符串中出现的次数 count
print(msga.count('dahai'))
1.2.6 判断检查
PYTHON
# 判断一个字符串里的数据是不是都是数字 isdigit # 返回布尔值     判断什么      是不是   对不对   is开头的方法,就是判断
num = '1818'
num1 = '18aaa18'
aaaa = 'aaa'
print(num.isdigit())
print(num1.isdigit())

# 判断每个元素是不是都是字母 isalpha
print(aaaa.isalpha())
print(num.isalpha())
print(num1.isalpha())

# 比较开头的元素是否相同 startswith  以什么开头
# 比较结尾的元素是否相同 endswith    以什么结尾
# 返回布尔类型
mm = 'dahai xialuo'
print(mm.startswith('dahai'))
print(mm.endswith('uo'))
# 判断字符串中的值是否全是小写的 islower
# 判断字符串中的值是否全是大写的 isupper
letter2 = 'ABC'
letter3 = 'abc'
letter4 = 'aAbc'
print(letter2.isupper())
print(letter3.isupper())
print(letter4.isupper())
print(letter2.islower())
print(letter3.islower())
print(letter4.islower())
1.2.7 字符串转义
PYTHON
# 字符串的转义
# 字符串的转义   加了 \  字符不再表示它本身的含义
# 常用的  \n  \t
# \n 换行符
print('hello \n python')
# \n 横向换行符 相当于一个tab  四个空格
print('hello \t python')

# #(实在想打出\n \t)不让它转义
print(r'hello \n python \t')
# 实在想打出\n \t
print('hello \\n python \\t')

1.3 字符串所有方法总结(常用与不常用)

1.3.1 大小写转换
方法名 作用
capitalize() 首字母大写,其余字符小写(仅对首字符生效,如 "hello".capitalize() → "Hello")。
casefold() 转换为小写(比 lower() 更激进,支持多语言,如德语 ß → ss)。
lower() 所有字符转换为小写(如 "HELLO".lower() → "hello")。
upper() 所有字符转换为大写(如 "hello".upper() → "HELLO")。
swapcase() 大小写互换(如 "Hello".swapcase() → "hELLO")。
title() 每个单词首字母大写,其余小写(如 "hello world".title() → "Hello World")。
1.3.2 判断与检查(返回布尔值)
方法名 作用
isalnum() 是否全为字母/数字(无空格或符号,如 "abc123".isalnum() → True)。
isalpha() 是否全为字母(如 "abc".isalpha() → True"abc123".isalpha() → False)。
isascii() 是否所有字符均为 ASCII 码(0-127,如 "a1!".isascii() → True,中文则 False)。
isdecimal() 是否全为十进制数字(仅 0-9,不包含罗马数字或分数,如 "123".isdecimal() → True)。
isdigit() 是否全为数字字符(包含 Unicode 数字,如 "¹²³".isdigit() → True)。
isnumeric() 是否全为数值字符(包含数字、分数、罗马数字等,如 "½Ⅷ".isnumeric() → True)。
isidentifier() 是否为合法标识符(变量名规则:字母/下划线开头,后跟字母/数字/下划线,如 "my_var".isidentifier() → True)。
islower() 是否所有字母均为小写(且至少有一个字母,如 "hello".islower() → True)。
isupper() 是否所有字母均为大写(且至少有一个字母,如 "HELLO".isupper() → True)。
istitle() 是否符合标题格式(每个单词首字母大写,如 "Hello World".istitle() → True)。
isprintable() 是否所有字符均可打印(无控制字符,如 "hello\n".isprintable() → False,换行符不可打印)。
isspace() 是否全为空白字符(空格、制表符 \t、换行符 \n 等,如 " \t\n".isspace() → True)。
startswith(prefix) 是否以指定前缀开头(如 "hello".startswith("he") → True)。
endswith(suffix) 是否以指定后缀结尾(如 "hello".endswith("lo") → True)。
1.3.3 搜索与替换
方法名 作用
count(sub[, start[, end]]) 统计子串 sub[start:end] 范围内出现的次数(如 "ababa".count("aba") → 1)。
find(sub[, start[, end]]) 查找子串 sub 的索引,未找到返回 -1(如 "hello".find("lo") → 3)。
rfind(sub[, start[, end]]) 从右侧开始查找子串 sub 的索引(如 "ababa".rfind("aba") → 2)。
index(sub[, start[, end]]) find(),但未找到时 报错ValueError)。
rindex(sub[, start[, end]]) rfind(),但未找到时 报错
replace(old, new[, count]) 替换子串 oldnewcount 为最大替换次数(如 "aaa".replace("a", "b", 2) → "bba")。
translate(table) 通过翻译表替换字符(需配合 str.maketrans() 使用,如替换多个字符)。
maketrans(x[, y[, z]]) 创建翻译表(用于 translate(),如 str.maketrans("abc", "123") 生成 a→1、b→2、c→3 的映射)。
1.3.4 分割与连接
方法名 作用
split(sep=None, maxsplit=-1) sep 分割字符串为列表,maxsplit 为最大分割次数(默认空格分割,如 "a b c".split() → ["a", "b", "c"])。
rsplit(sep=None, maxsplit=-1) 从右侧开始分割(如 "a/b/c".rsplit("/", 1) → ["a/b", "c"])。
splitlines([keepends]) 按换行符分割(\n\r\n 等),keepends=True 保留换行符(如 "a\nb".splitlines() → ["a", "b"])。
join(iterable) 将可迭代对象(如列表)的元素用字符串连接(如 "_".join(["a", "b"]) → "a_b")。
partition(sep) sep 分割为 (head, sep, tail)sep 不存在则 (s, "", "")(如 "a/b/c".partition("/") → ("a", "/", "b/c"))。
rpartition(sep) 从右侧开始分割(如 "a/b/c".rpartition("/") → ("a/b", "/", "c"))。
1.3.5 填充与对齐
方法名 作用
center(width[, fillchar]) 居中对齐,总长度为 width,两侧用 fillchar 填充(默认空格,如 "abc".center(5, "*") → "*abc*")。
ljust(width[, fillchar]) 左对齐,右侧填充(如 "abc".ljust(5) → "abc ")。
rjust(width[, fillchar]) 右对齐,左侧填充(如 "abc".rjust(5) → " abc")。
zfill(width) 左侧用 0 填充,总长度为 width(如 "123".zfill(5) → "00123")。
expandtabs([tabsize=8]) 将制表符 \t 替换为空格,tabsize 为制表符宽度(如 "a\tb".expandtabs(4) → "a b")。
1.3.6 修剪与清理
方法名 作用
strip([chars]) 移除字符串两端的 chars 字符(默认移除空白字符:空格、\t\n 等,如 " abc ".strip() → "abc")。
lstrip([chars]) 移除左侧的 chars 字符(如 "###abc###".lstrip("#") → "abc###")。
rstrip([chars]) 移除右侧的 chars 字符(如 "###abc###".rstrip("#") → "###abc")。
removeprefix(prefix) 移除前缀 prefix(如 "hello".removeprefix("he") → "llo",Python 3.9+)。
removesuffix(suffix) 移除后缀 suffix(如 "hello".removesuffix("lo") → "hel",Python 3.9+)。
1.3.7 编码与解码
方法名 作用
encode(encoding="utf-8", errors="strict") 将字符串编码为字节(bytes),如 "你好".encode("utf-8") → b'\xe4\xbd\xa0\xe5\xa5\xbd'
decode(encoding="utf-8", errors="strict") 字节对象方法(非字符串方法),将字节解码为字符串(如 b'\xe4\xbd\xa0'.decode("utf-8") → "你")。

2、数字类型

2.1 数字类型的介绍

1、整型 int

作用:就是记录精确的整数数值,比如,年龄、人数、时间、金额……

👉定义输出类型看看

PYTHON
# 定义
age = 22
print(type(age))

2、浮点型 float 小数

作用:记录身高height、体重weight、薪资salary……

注意:浮点数的相加是不精确的

PYTHON
# 定义
weight = 151.2
print(type(weight))
float_1 = 1.1
float_2 = 2.2
print(float_1 + float_2, "----")  # 结果不精确

3、复数 (了解) complex

常用于:电路分析(阻抗计算)、信号处理(傅里叶变换)、量子力学(波函数表示)

👉简单看看👀

PYTHON
x = 2 - 2j
print(x)
print(type(x))

2.2 数字类型的计算

1、基本运算加+ 减- 乘* 乘方** 除/ 整除// 取余% 比较运算 > < >= <= == !=

PYTHON

# 基本的运算
"""
+ - * **
"""
num1 = 10
num2 = 3
print(num1 + num2)
print(num1 - num2)
print(num1 * num2)
print(num1 ** num2)  # num1的num2次方  10 的 3 次方

"""
 / // % 
"""
# // 是向下取整   地板除
print(num1 / num2)
print(num1 // num2)
print(15 / 4)
print(15 // 4)
# / 结果一定是浮点数
print(10 / 5)

# % 顾名思义就是求余数   被除数 / 除数 = 商 …… 余数
print(num1 % num2)

# 比较运算 > < >= <= == != 结果是布尔值  True False(比较值)
print(3 > 4)
print(3 < 4)
print(3 >= 4)
print(3 <= 4)
print(3 == 4)
print(3 != 4)
print(type(3 != 4))

# 身份运算符 判断是不是一个对象
a = 100000
b = 100000
print(id(a), id(b))  # 实际上a 和 b 是同时指向了10000
print(a is b)
print(id(100000), id(100000))
# 总结:
# 注意⚠️:在交互模式下,是不一样的(python有一个小整数池[-5,256]是一样的,超出范围不一样)(研究发现,程序中 -5 到 256 的整数出现频率最高)
# 特殊情况:同一代码块的大整数优化
# 在 同一代码块(如脚本文件、函数)中,相同的大整数字面量可能被编译器优化为同一对象(非小整数池机制,而是“常量折叠”)

#避免 == 与 is 混淆
#== 判断值相等(True == 1 为 True)。
#is 判断对象身份(True is 1 为 False,True 和 False 是单例对象)。

注意:

  • 避免 ==is 混淆
  • == 判断值相等(True == 1True)。
  • is 判断对象身份(True is 1FalseTrueFalse 是单例对象)。

2、赋值运算 =、+=、-=、*=、/=、%=、**=、//=

PYTHON

"""
3、赋值运算 =>  赋值 + 算术运算
    # 普通赋值 =
    # 加法赋值 +=
    # 减法赋值 -=
    # 乘法赋值 *=
    # 除法赋值 /=
    # 取余赋值 %=
    # 乘方赋值 **=
    # 整除(地板除)赋值 //=
"""
# 普通赋值 = (变量赋值)
num = 1

# 加法赋值 +=
num += 1  # num = num + 1
print(num)

# 减法赋值 -=
num -= 1 # num = num - 1
print(num)

# 乘法赋值 *=
num *= 2 # num = num * 2
print(num)

# 除法赋值 /=
num /= 2 # num = num / 2
print(num)

# 取余赋值 %=
num %= 2 # num = num % 2
print(num)

# 乘方赋值 **=
num **= 2 # num = num ** 2
print(num)

# 整除(地板除)赋值 //=
num //= 2 # num = num // 2
print(num)

3、布尔类型

Python 的布尔类型(bool)是基础数据类型之一,用于表示逻辑判断的结果(真/假)。

布尔类型:bool

作用:通常用于逻辑判断

布尔值 一个是 True 一个是 False

👉练练手

PYTHON
flag1 = True
flag2 = False
print(flag1, type(flag1))
print(flag2, type(flag2))
flag1 = False
print(flag1)

# 我们定义一个变量表示一个人是否成年,然后我们再根据这个变量的值来执行不同的代码快
is_adult = input("请输入是否成年(成年输入1,未成年输入0):")
print(is_adult, type(is_adult))

if is_adult == '1':
    is_adult = True
else:
    is_adult = False

if is_adult:
    print("这个人已经成年了!")
else:
    print("这个人还未成年!")

True:(逻辑真,本质是整数 1 的特殊实例)
False:(逻辑假,本质是整数 0 的特殊实例)

🤔验证:

PYTHON
# 结果均为True,说明True和False的值就是1和0
print(True == 1)
print(False == 0)
# 均为False,说明True并不是1,False并不是0,只是值相等(可能会有语法警告)
print(True is 1)
print(False is 0)
# 1 和 1 是一个东西,但是 True 和 1 就不是一个东西 
print(1 is 1)
print(0 is 0)
# 说明不是一个东西,地址不一样
print(id(True), id(False))
print(id(1), id(0))

Python 数据"自带布尔值"

每个对象在条件判断中会根据自身状态(是否为空、是否为零等)自动转换为TrueFalse

不仅仅是真假 还有数据的有无

  • None 表示"无值"或"不存在",是 Python 中一个特殊的常量,属于 NoneType类型(该类型只有 None 一个实例)。

  • 0 -> 0 == False

  • 空序列(容器)-->(空字符串、空列表、空字典、空集合、空元组)

PYTHON
"""
# 重点知识
    # 不仅仅是真假  还有数据的有无
    # Python 数据"自带布尔值":
    # 每个对象在条件判断中会根据自身状态(是否为空、是否为零等)自动转换为 True 或 False
        # None 表示"无值"或"不存在",是 Python 中一个特殊的常量,属于 NoneType 类型(该类型只有 None 一个实例)。
        # 0  -> 0 == False
        # 空序列(容器)-->(空字符串、空列表、空字典、空集合、空元组)

# 布尔值为False所有"空"对象在布尔上下文中(如 if 条件判断)会被视为 False,非空对象则视为 True
"""
# if []: # 空列表
# if (): # 空元组
# if {}:  # 表示空字典(直接花括号会默认识别成空字典,不会识别成集合) print(type({}))
# if set():  # 空集合
# if '':  # 空字符串
# if 0:  # 0
if None: # None
    print(1)
else:
    print(2)

# 表示空字典(直接花括号会默认识别成空字典,不会识别成集合) print(type({}))
print(type({}))

4、列表类型

  • 核心概念:列表是 Python 中最常用的有序、可变序列,可存储任意类型元素(整数、字符串、对象等),元素间用逗号分隔,整体包裹在方括号 [] 中。
  • 底层实现:基于动态数组Dynamic Array)实现,支持自动扩容与缩容,按索引访问效率极高(时间复杂度 O(1))。

4.1 列表list

作用: 记录、存储多个值,可以方便地取出来指定位置的值(索引取值)
比如 爱好,学生姓名……

定义:在[ ]内用逗号隔开多个任意类型的值

PYTHON
lst = ["小明", 1, 1.1, True, ["小明", 1, 1.1, True]]
# 索引   0     1   2    3             4

print(lst[0], lst[-5])
print(lst[1], lst[-4])
print(lst[2], lst[-3])
print(lst[3], lst[-2])
print(lst[4], lst[-1])

# 取列表里面的列表的值
print(lst[4][0])

# 第4号索引的值整体赋值给变量 lst1
lst1 = lst[4]
print(type(lst1))
print(lst1[0])

# 修改某个位置上的值
try:
    lst[1] = '小红'
except Exception as e:
    print(e)
print(lst)

4.2 列表的相关操作

🔹增 append()、insert()、extend()

PYTHON
lst = ["小明", 1, 1.1, True, ["小明", 1, 1.1, True]]
# 索引    0    1   2    3             4
# 索引(反)-5   -4  -3   -2             -1
# 增删改查 统计
# 1、增
print("----------------增---------------")
# append(元素)
# 往列表末尾追加一个元素
lst.append("append")
print(lst)

# extend()
# 往列表当中添加多个元素 括号里放列表 也是末尾追加
lst2 = ["extend1","extend2"]
lst.extend(lst2)
print(lst)

# insert(索引,元素)
# 往指定索引位置前插入一个元素
lst.insert(1,'insert')
print(lst)

🔹删 del、pop、remove、clear

PYTHON
# 删
print("----------------删---------------")
# del
# del lst[0]
# print(lst)

# 指定删除
# lst.remove("小明")
# print(lst)

# pop  从列表里拿走一个值
# 按照索引删除值
print("---------------pop-------------")
# ·默认删除最后一个   pop返回值是删除的值
# lst.pop()
# print(lst)
# 指定索引
# lst.pop(0)
# print(lst)

# 清空列表
# lst.clear()
# print(lst)

🔹改

PYTHON
# 改
print("----------------改---------------")
# 索引赋值
lst[0] = '小红'
print(lst)

# 切片赋值
# lst[0:2] = [1,2]
# print(lst)

# 反序
lst.reverse()
print(lst)

🔹

PYTHON
# 查
print("----------------查---------------")
# 索引取值 (正向取、反向取)
print(lst[0], lst[-9])
# 切片 [起始值:终止值:步长] 左闭右开
print(lst[::])
print(lst[3:0:-1])  # 取得到
print(lst[3:0:1])  # 取不到空置

🔹统计

PYTHON
# 统计
print("----------------统计---------------")
# len() 长度
print(lst, len(lst))
# index 查找元素索引
print(lst.index("小红"))
# print(lst.index("小"))  # 报错
# 统计元素出现次数:count()
lst3 = [1,1,3,4,1,2,1]
print(lst3.count(1))

4.3 列表相关方法总结

方法名 核心功能 参数要点 原地修改?
append(x) 末尾添加单个元素 x 为任意类型 ✅ 是
extend(iterable) 末尾扩展可迭代对象的元素 iterable 为列表、元组等 ✅ 是
insert(index, x) 指定位置插入元素 index 为插入索引 ✅ 是
remove(x) 删除第一个值为 x 的元素 x 为元素值,不存在抛 ValueError ✅ 是
pop(index=-1) 删除并返回指定索引元素(默认最后一个) index 为索引,默认 -1 ✅ 是
clear() 清空所有元素 ✅ 是
index(x, start, end) 返回第一个 x 的索引 start/end 限定搜索范围 ❌ 否
count(x) 统计 x 出现次数 x 为元素值 ❌ 否
sort(key, reverse) 原地排序(升序/降序,支持自定义键) key 为排序函数,reverse 控制方向 ✅ 是
reverse() 原地反转元素顺序 ✅ 是
copy() 返回浅拷贝新列表 ❌ 否

5、元组类型

5.1 定义与本质

核心概念:元组是 Python 中一种有序、不可变序列,可存储任意类型元素(整数、字符串、对象等),元素间用逗号分隔,通常包裹在圆括号 () 中(括号可省略,但推荐使用以增强可读性)。
底层实现:基于固定大小数组实现,不可动态扩容,因此比列表更节省内存,访问速度更快。
不可变性:元组创建后,元素值和数量不可修改(无法添加、删除或替换元素),但元素若为可变对象(如列表),其内部数据可修改。

  • 类型:tuple
  • 用途:记录多个值,当多个值没有修改的需求,此时用元组更合适,元组里面的值不要改.
  • 定义方式:在()内用逗号分隔开多个任意类型的值.

一句话总结:

元组(`Tuple`) 就是一个用透明胶带封死的、透明的、装着一组固定东西的盒子。
你能看、能数、能找、能复制、能连盒子、能拆包,但就是不能改、不能加、不能减里面的东西!
当你需要一组固定不变的数据时,就用它。

创建盒子(元组)很简单:用圆括号 ( ) 把东西括起来,东西之间用逗号 , 隔开。
👉小试牛刀

PYTHON
t = (1, 1.1, '人生苦短,我用python!', True, (1, 1.1, '人生苦短,我用python!'), ['人生苦短,我用python!', 2, 3])
#    0   1            2               3                4                            5
#   -6  -5           -4              -3               -2                           -1
print(t, type(t))
print(t[0], t[-6])
print(t[1], t[-5])
print(t[2], t[-4])
print(t[3], t[-3])
print(t[4], t[-2])
print(t[5], t[-1])

print(t[4][0])
print(t[5][0])

5.2 元组的方法

可以删、查,不能新增和修改,但是:

删:删除整个元组对象

查:与列表一样索引,切片,长度lencount个数,index查找元素所在索引成员运算

元组内元素如果是可变对象,那这个可变对象还是支持它自己的增删改(除了删除可变对象本身之外)因为可变对象本身是元组的元素了,元组是不支持修改的。

PYTHON
t = (1, 2, '人生苦短', (4, 5), [7, 8])
#    0  1        2      3       4
#   -5 -4       -3     -2      -1

# 不能索引修改
# 元组本身是不可变的,他的元素是不能直接修改的,
# 但是如果元组里的元素本身就是可变的,那么这个可变的元素,它遵循的是自己可变的原则
try:
    t[0] = 2
except Exception as e:
    print(e)

# 元组里的列表可以改
t[4][0] = '小花'
print(t)

# 查
# 与列表一样索引,切片,长度len,count个数,index查找元素所在索引成员运算

# 删
del t

5.3 元组🆚列表

特性 元组(Tuple) 列表(List)
可变性 不可变(元素不可增删改) 可变(支持增删改)
语法 圆括号 ()(可省略) 方括号 []
内存效率 更高(固定大小,无需扩容空间) 较低(动态数组,预留扩容空间)
访问速度 更快(无需检查动态变化) 稍慢(需维护动态大小)
哈希性 可哈希(可作字典键/集合元素) 不可哈希(不可作字典键)
方法 count()index() 丰富(append()sort() 等)
适用场景 存储不可变数据(如配置、坐标) 存储动态数据(如用户输入、日志)

6、字典类型

6.1 字典类型 dict

核心概念:字典是 Python 中一种无序(Python 3.7+ 变为有序)、可变的键值对(key-value)集合,用于存储映射关系数据。每个元素由 键(key) 和 值(value) 组成,键和值之间用冒号 : 分隔,元素间用逗号分隔,整体包裹在花括号{} 中。
底层实现:基于哈希表(Hash Table) 实现,通过键的哈希值快速定位值,因此查找、添加、删除操作的平均时间复杂度为 O(1)(常数级)。
键的要求

  • 必须是可哈希(不可变)类型,如整数、字符串、元组(元素不可变)等。
  • 不能重复(重复键会被覆盖,保留最后一次赋值)。
  • 值的特性:可以是任意类型(包括可变类型如列表、字典,或函数、对象等),且可重复。

作用:记录多个key:value值(键值对),key:value => key描述性质 value:值

如: 小林: 身份证:4358112

​ 小爱 : 身份证:4546544

​ 小坤: 身份证:123135415

​ 姓名: 念尘 年龄:18

keyvalue(键对值) key:value

种类 : 具体内容

TEXT
鱼:   带鱼、鲫鱼、鲤鱼
游戏: csgo、英雄联盟、cf、王者荣耀
key : value   --> 键值对

定义:

在{}内用逗号分隔开多个key:value元素,其中value可以是任意数据类型。
通常用字符串、数字或元组(元组里的元素也必须不可变)来做标签。列表不能当标签(因为列表会变)。

👉小试牛刀🔪

PYTHON
dic = {
    "列表": ["苹果", "香蕉"],  # 值可以是任何类型,比如列表
    "字符串": "饼干",  # 也可以是字符串
    "整型": 3,  # 值也可以是整型
    "布尔": True, # 值也可以是布尔
    "元组": (1,2,3), # 值也可以是元组
    "字典": {"小明": 18},  # 值也可以是字典
    "浮点": 1.1  # 值也可以是浮点
}

print(dic)
print(type(dic))
# 取值
print(dic['列表'])
print(dic['字符串'])
print(dic['整型'])
print(dic['字符串'])
print(dic['布尔'])
print(dic['元组'])
print(dic['字典'])
print(dic['浮点'])

6.2 字典的相关操作

PYTHON
# 字典的创建
# 花括号{}
info1 = {"name": '大海', 'age': 18}
# dict()
info2 = dict(x=1,y=2)
print(info1, id(info1))
print(info2, id(info2))

# 增
info1["addr"] = '北京'
info2["addr"] = '纽约'
print(info1, id(info1))
print(info2, id(info2))
# 对比id值可以发现增加之后不会改变内存地址,所以是可变类型

# len() 字典里面的len方法是查看键值对的个数
print(len(info1), len(info2))

# 成员运算  in 和 not in 字典的成员运算判断的是key,返回值是布尔值
print('name' in info1)
print('addr' in info2)

# 删
# clear()
# info1.clear()
# info2.clear()
# print(info1, info2)

# del
# del info1['addr']
# del info2['addr']
# print(info1, info2)

# 删除的key不存在会报错
# del info1['add']
# print(info1)

# pop 删除 返回值是value   实际上就是拿走了字典的value
# res = info1.pop('name')
# print(res, info1)

# 改
# 1'
# info1['name'] = "小海"
# print(info1)
# 2'
info1.update({"name": '小海'})
info1.update({"name1": '小海1'})  # 如果修改的字段不存在,其实就是新增了
print(info1)
# setdefault
# 有则不动/返回原值,无则添加/返回新值
# 字典中已经存在key则不修改,返回已经存在的key对应的value
res = info1.setdefault('name', 'xxx')
print(res, '-')
print(info1)
res2 = info1.setdefault('name2', 'xxx')
print(res2)
print(info1)

# 查
# 1'
print(info2['addr'])
# 查一个不存在的key会报错
# print(info1['xxx'])

# 2'
print(info1.get('name'))
# 没有key就返回None,不会报错
print(info1.get('xxxx'))
# 可自定义返回值
print(info1.get('xxxx', '无'))

# 3'
# 取所有key
print(list(info1.keys()))
# 取出所有值
print(list(info1.values()))
# 取出所有键值对
print(list(info1.items()))

6.3 字典🆚列表🆚元组

特性 字典(Dictionary) 列表(List) 元组(Tuple)
存储方式 键值对(映射关系) 有序元素(序列) 有序元素(不可变序列)
访问方式 键(dict[key] 索引(list[index] 索引(tuple[index]
查找效率 O(1)(哈希表) O(n)(需遍历) O(n)(需遍历)
可变性 可变(键值对可增删改) 可变(元素可增删改) 不可变(元素不可增删改)
键/索引要求 键唯一、可哈希 索引为非负整数 索引为非负整数
适用场景 存储关联数据(如配置、缓存) 存储动态序列(如日志、列表) 存储不可变序列(如坐标、日期)

6.4 字典方法总结

方法名 核心功能 参数要点 原地修改?
update([other]) 用其他字典/键值对更新,覆盖重复键 other 为字典、元组列表或关键字参数 ✅ 是
setdefault(key, d) 键存在返回值,不存在则添加键值对 {k: d} d 为默认值(默认 None ✅ 是
get(key, d) 安全访问键值,不存在返回 d(默认 None key 为目标键,d 为默认值 ❌ 否
keys() 返回所有键的动态视图 ❌ 否
values() 返回所有值的动态视图 ❌ 否
items() 返回所有键值对的动态视图((k, v) 元组) ❌ 否
pop(key, d) 删除并返回键值,不存在返回 d(或抛错) key 为目标键,d 为默认值 ✅ 是
popitem() 删除并返回最后插入的键值对(3.7+ 有序) 无(空字典抛 KeyError ✅ 是
clear() 清空所有键值对 ✅ 是
copy() 返回浅拷贝新字典 无(嵌套对象仍为引用) ❌ 否
fromkeys(iter, v) 创建新字典,键来自 iter,值为 v iter 为键的来源,v 为默认值(共享) ❌ 否

6.5 总结

字典(Dictionary) 就是一个贴满了标签的万能收纳盒。你存东西、找东西、改东西、删东西,全靠你贴的那个标签(Key)。
标签要唯一且不能变(常用字符串或数字),值(Value)随便放。
当你需要通过名字快速找到信息时,字典就是你的最佳拍档!记住它的核心:钥匙(Key)开锁找值(Value)。

7、集合类型

在Python中,集合(Set)是一种无序且元素唯一的可变数据类型,主要用于存储互不相同的元素,支持数学中的集合运算(如交集、并集、差集等)。

7.1集合的定义、创建和使用

核心概念:集合是 Python 中一种无序、可变、元素唯一的序列,用于存储不重复的元素集合。元素间用逗号分隔,整体包裹在花括号{} 中,或通过 set() 函数创建。
底层实现:基于哈希表(Hash Table) 实现,元素需可哈希(不可变类型),因此查找、添加、删除操作的平均时间复杂度为 O(1)(常数级)。
核心特性

  • 无序性:元素没有固定顺序,不支持索引访问。
  • 唯一性:自动去重,重复元素会被忽略。
  • 可变性:支持动态添加/删除元素(但元素本身必须不可变)。

✅基本语法
使用大括号 {}set() 函数创建,元素间用逗号分隔

PYTHON
# 集合的定义
s = {1,2,'人生苦短'}
# s = set()
print(s, type(s))

s1 = {'a','b','d'}
s2 = {'a','b','c'}
print(s1, type(s1))
print(s2, type(s2))

# 运算 交集 并集 差集 对称差集  想象你有两个朋友圈。
print(s1 & s2)  # 交集 拿2个集合相同的元素  shift + 7  &  ( 你和朋友都认识的人。)
print(s1 | s2)  # 并集  两个集合合并,相同只取一次,不同就都取(你们两人认识的所有人(不重复))
print(s1 - s2)  # 差集  s1 有但 s2 没有的值(我认识,但他不认识的人。)
print(s2 - s1)  # 差集  s2 有但 s1 没有的值(我认识,但他不认识的人。)
print(s1 ^ s2)  # 对称差集 (我们各自独有的好友)

✅运算总结:

运算类型 运算符 方法 示例s1={1,2,3}, s2={2,3,4}
并集(所有元素) s1 | s2 s1.union(s2) {1,2,3,4}
交集(共含元素) s1 & s2 s1.intersection(s2) {2,3}
差集(s1 独有) s1 - s2 s1.difference(s2) {1}
对称差集(独有的元素) s1 ^ s2 s1.symmetric_difference(s2) {1,4}

✅不可变集合(frozenset)[ 扩展 ]

frozenset() 创建,元素不可修改,可作为字典的键或其他集合的元素。

PYTHON
fs = frozenset([1, 2, 3])
print(fs,type(fs))

✅集合的相关操作

PYTHON
set1 = {1,2,'小明'}
print(id(set1))

# 添加单个元素 add
set1.add('小红')
print(set1, id(set1))
# 对比id值可知,集合是可变类型

# 添加多个元素
# set1.update(['1', '2', '小明'])
# print(set1)

# 删除 (多运行几次就可以发现每次pop的值不一样,说明集合的无序) 随机删除并返回一个元素(因集合无序,无法指定)
# set1.pop()
# print(set1)

# remove  指定删除
# set1.remove('小明')
# set1.remove(1)
# 元素不存在会报错
# set1.remove(3)
# print(set1)

# discard  删除指定元素
# set1.discard(1)
# print(set1)
# 若元素不存在,无操作
# set1.discard(3)
# print(set1)


# in、 not in
s = {"apple", "banana"}
print("apple" not in s)   # 输出:True(存在)
print("orange" in s)  # 输出:False(不存在)

7.2 集合的核心特性

  1. 无序性:元素没有固定顺序,不支持索引和切片。
  2. 唯一性:自动去重,重复元素会被保留一个。
  3. 可变性:普通集合(set)支持添加/删除元素,frozenset 不可变。
  4. 元素类型限制:元素必须是不可变类型(如整数、字符串、元组),列表、字典等可变类型不能作为集合元素。

7.3 集合🆚列表🆚元组🆚字典

特性 列表(List) 字典(Dictionary) 元组(Tuple) 集合(Set)
定义 有序、可变序列 无序(3.7+有序)键值对集合 有序、不可变序列 无序、可变、元素唯一集合
语法标识 [] {key: value} ()(或无括号) {}(空集合需用 set()
可变性 可变(增删改元素) 可变(增删改键值对) 不可变(元素不可增删改) 可变(增删元素,元素需不可变)
元素唯一性 允许重复元素 键唯一,值可重复 允许重复元素 自动去重(元素唯一)
有序性 有序(支持索引/切片) 3.7+有序(插入顺序) 有序(支持索引/切片) 无序(不支持索引/切片)
元素类型限制 无(可存储任意类型) 键必须可哈希(不可变类型) 无(可存储任意类型) 元素必须可哈希(不可变类型)
底层实现 动态数组 哈希表 固定大小数组 哈希表
是否可哈希 不可哈希(不能作字典键) 不可哈希(不能作字典键) 可哈希(可作字典键) 不可哈希(不能作字典键)

核心操作对比

1、创建方式

数据结构 示例
列表 [1, 2, 3]list(range(5))
字典 {"a": 1, "b": 2}dict(a=1, b=2)
元组 (1, 2, 3)1, 2, 3(单元素需加逗号:(1,)
集合 {1, 2, 3}set([1, 2, 3])(空集合:set(),不可用 {}

2、访问元素

数据结构 访问方式 效率 示例
列表 索引 lst[index] O(n) [1,2,3][0] → 1
字典 dict[key]dict.get(key) O(1) {"a":1}["a"] → 1
元组 索引 tpl[index] O(n) (1,2,3)[-1] → 3
集合 成员检测 elem in set O(1) 1 in {1,2,3} → True

3、添加/修改元素

数据结构 添加/修改操作 示例
列表 append()(尾加)、insert()(指定位置) lst = [1]; lst.append(2) → [1, 2]
字典 dict[key] = valueupdate() d = {}; d["a"] = 1 → {"a": 1}
元组 不可修改(需重新创建新元组) t = (1,2); t + (3,) → (1,2,3)
集合 add()(单元素)、update()(批量) s = {1}; s.add(2) → {1, 2}

4、删除元素

数据结构 删除操作 示例
列表 del lst[index]pop()remove() lst = [1,2]; lst.pop() → [1]
字典 del dict[key]pop(key)popitem() d = {"a":1}; d.pop("a") → {}
元组 不可删除(需重新创建新元组) -
集合 remove(elem)(不存在抛错)、discard(elem)(安全删除) s = {1}; s.remove(1) → set()

5、场景

数据结构 核心适用场景 典型案例
列表 存储动态序列(元素需有序/重复)、频繁修改数据 日志记录、待办事项列表、批量数据存储
字典 存储键值对映射关系、配置参数、快速查找数据 用户信息({"name": "Alice", "age": 30})、缓存数据({key: result}
元组 存储不可变数据、保护数据安全、函数返回多值 坐标 (x, y)、日期 (year, month, day)、函数返回 (status, data)
集合 去重、成员检测、集合运算(交集/并集/差集) 列表去重 list(set(lst))、用户ID去重、共同好友计算 users1 & users2****

7.4 特性区别总结

可变性 vs 不可变性:

  • 可变:列表、字典、集合(适合动态数据)。
  • 不可变:元组(适合静态数据,如常量、哈希键)。

有序性 vs 无序性:

  • 有序:列表、元组、3.7+字典。
  • 无序:集合、3.7前字典(不支持索引,顺序不固定)。

元素唯一性:

  • 仅集合支持自动去重,其他结构允许重复元素。

哈希性:

  • 可哈希:元组(可作字典键或集合元素)。
  • 不可哈希:列表、字典、集合(不能作字典键)。

性能核心:

  • 字典和集合基于哈希表,查找/添加/删除效率为O(1),适合高频操作。
  • 列表和元组基于数组,索引访问快,但删除中间元素效率低(O(n))

六、用户交互

input函数

input() 是 Python 中用于获取用户输入的内置函数。

简单来说,它可以让程序暂停运行,等待用户在键盘上输入内容,按回车键后继续执行,并将用户输入的内容返回给程序。
作用:实现程序与用户的交互(比如让用户输入名字、年龄、选择等)。

电脑与用户交互:
Pythoninput()函数用于从用户处获取键盘输入
内置函数input()

阻塞等待用户输入

注意:input函数返回都是字符串

👉小试牛刀

PYTHON
strings = input("请输入你最喜欢的动画片:")
print(type(strings), id(strings))

👉记住:input函数接收到的值是字符串

PYTHON
age = input("请输入你的年龄:")
print(age, id(age), type(age))
# '18' -> 18
age2 = int(age)
print(age2, type(age2))

👉再来个案例练练手

PYTHON
# 两个数相加
a = input("请输入第一个数:")
b = input("请输入第二个数:")
print(a+b)

评论 (0)

登录后才能发表评论

登录发表评论