写给玻璃球新社员的python基础语法
时间过的是嘎嘎快,恍惚间笔者还是在听这学长讲课,一转眼笔者也成为了讲课的人。哈哈,有初听不知曲中意,再听已是曲中人之感。这篇博客写于暑假,因为怕开学了没时间写,然后顺道巩固一下基础。
首先python的特色啥的就不多讲了,直接开始正题吧
本文参考 Python基础 给玻璃球工作室的新生们-CSDN博客 工作室一个厉害的学长
一.注释 变量 bug和debug 数据类型 输出/入 运算符
1.注释
i.单行注释
# 注释
ii.多行注释
'''
注释1
注释2
注释3
'''
2.变量
什么是变量?
简单的来说,变量是存储数据的的时候当前数据所在的内存地址的名字
比如说图书馆里的书都有编号,一个编号对应一本书。同理,程序中,数据都是临时存储在内存中,为了更快速的查找或使用这个数据,通常我们把这个数据在内存中存储之后定义一个名称,这个名称就是变量。
i.变量的命名
变量名 = 值
变量名自定义,要满足标识符命名规则。
什么是标识符?
#保留关键字有哪些
import keyword
print(keyword.kwlist)
'''
False None True and as assert break class
continue def del elif else except finally for
from global if import in is lambda nonlocal
not or pass raise return try while with
yield
'''
标识符命名规则是Python中定义各种名字的时候的统一规范,具体如下:
- 由数字、字母、下划线组成
- 不能数字开头
- 不能使用内置关键字
- 严格区分大小写
ii.命名习惯
- 见名知义。
- 大驼峰:即每个单词首字母都大写,例如:
MyName
- 小驼峰:第二个(含)以后的单词首字母大写,例如:
myName
- 下划线:例如:
my_name
另外,相比较其他语言,如C,java等,python支持变量的连等,甚至支持中文作为变量名(尽量不用)
如:
a=b=c=0
玻璃球=blq
3.bug和debug
bug是一个很笼统的概念,简单来讲就是程序中的错误
debug :
i.Debug工具使用步骤:
- 打断点
- Debug调试
ii.打断点
iii.debug调试
4.数据类型
检测数据类型的方法:type()
a = 1
print(type(a)) # <class 'int'> -- 整型
b = 1.1
print(type(b)) # <class 'float'> -- 浮点型
c = True
print(type(c)) # <class 'bool'> -- 布尔型
d = '12345'
print(type(d)) # <class 'str'> -- 字符串
e = [10, 20, 30]
print(type(e)) # <class 'list'> -- 列表
f = (10, 20, 30)
print(type(f)) # <class 'tuple'> -- 元组
h = {10, 20, 30}
print(type(h)) # <class 'set'> -- 集合
g = {'name': 'TOM', 'age': 20}
print(type(g)) # <class 'dict'> -- 字典
5.运算符
i. 算数运算符
运算符 | 描述 | 实例 |
---|---|---|
+ | 加 | 1 + 1 输出结果为 2 |
- | 减 | 1-1 输出结果为 0 |
* | 乘 | 2 * 2 输出结果为 4 |
/ | 除 | 10 / 2 输出结果为 5 |
// | 整除 | 9 // 4 输出结果为2 |
% | 取余 | 9 % 4 输出结果为 1 |
** | 指数 | 2 ** 4 输出结果为 16,即 2 * 2 * 2 * 2 |
() | 小括号 | 小括号用来提高运算优先级,即 (1 + 2) * 3 输出结果为 9 |
注意:
- 混合运算优先级顺序:
()
高于**
高于*
/
//
%
高于+
-
print(1+1)
print(1-1)
print(1*1)
print(1/1)
print(1//1)#取整
print(1%1)#取余
print(2**3)#2的3次方
ii. 复合赋值运算符
运算符 | 描述 | 实例 |
---|---|---|
+= | 加法赋值运算符 | c += a 等价于 c = c + a |
-= | 减法赋值运算符 | c -= a 等价于 c = c- a |
*= | 乘法赋值运算符 | c *= a 等价于 c = c * a |
/= | 除法赋值运算符 | c /= a 等价于 c = c / a |
//= | 整除赋值运算符 | c //= a 等价于 c = c // a |
%= | 取余赋值运算符 | c %= a 等价于 c = c % a |
**= | 幂赋值运算符 | c ** = a 等价于 c = c ** a |
a = 100
a += 1
print(a)
b = 2
b *= 3
print(b)
c = 10
c += 1 + 2
print(c)
iii. 比较运算符
比较运算符也叫关系运算符, 通常用来判断。
运算符 | 描述 | 实例 |
---|---|---|
== | 判断相等。如果两个操作数的结果相等,则条件结果为真(True),否则条件结果为假(False) | 如a=3,b=3,则(a == b) 为 True |
!= | 不等于 。如果两个操作数的结果不相等,则条件为真(True),否则条件结果为假(False) | 如a=3,b=3,则(a == b) 为 True如a=1,b=3,则(a != b) 为 True |
> | 运算符左侧操作数结果是否大于右侧操作数结果,如果大于,则条件为真,否则为假 | 如a=7,b=3,则(a > b) 为 True |
< | 运算符左侧操作数结果是否小于右侧操作数结果,如果小于,则条件为真,否则为假 | 如a=7,b=3,则(a < b) 为 False |
>= | 运算符左侧操作数结果是否大于等于右侧操作数结果,如果大于,则条件为真,否则为假 | 如a=7,b=3,则(a < b) 为 False如a=3,b=3,则(a >= b) 为 True |
<= | 运算符左侧操作数结果是否小于等于右侧操作数结果,如果小于,则条件为真,否则为假 | 如a=3,b=3,则(a <= b) 为 True |
print(1==1)
print(1!=1)
print(1>1)
print(1<1)
print(1>=1)
print(1<=1)
看到音符上一个up(英雄)发过一个视频,很有意思:
print(假 != 0) # 那这个结果是真还是假
# 假!=假 -> 假
iv. 逻辑运算符(与或非)
运算符 | 逻辑表达式 | 描述 | 实例 |
---|---|---|---|
and | x and y | 布尔"与":如果 x 为 False,x and y 返回 False,否则它返回 y 的值。 | True and False, 返回 False。 |
or | x or y | 布尔"或":如果 x 是 True,它返回 True,否则它返回 y 的值。 | False or True, 返回 True。 |
not | not x | 布尔"非":如果 x 为 True,返回 False 。如果 x 为 False,它返回 True。 | not True 返回 False, not False 返回 True |
print(0 and 1)
print(1 and 1)
print(0 or 1)
print(1 or 1)
print(not 0)
print(not 1)
print(1==1 and 2==2)
print(1==1 or 2==2)
print(not 1==1)
6.输入
input()
- 当程序执行到
input
,等待用户输入,输入完成之后才继续向下执行。(阻塞) - 在Python中,
input
接收用户输入后,一般存储到变量,方便使用。 - 在Python中,
input
会把接收到的任意用户输入的数据都当做字符串处理。
password = input('请输入您的密码:')
print(f'您输入的密码是{password}')
# <class 'str'>
print(type(password))
7.输出
i.简单输出
print()
ii*.格式化输出
所谓的格式化输出即按照一定的格式输出内容。
格式符号 | 转换 |
---|---|
%s | 字符串 |
%d | 有符号的十进制整数 |
%f | 浮点数 |
%c | 字符 |
%u | 无符号十进制整数 |
%o | 八进制整数 |
%x | 十六进制整数(小写ox) |
%X | 十六进制整数(大写OX) |
%e | 科学计数法(小写’e’) |
%E | 科学计数法(大写’E’) |
%g | %f和%e的简写 |
%G | %f和%E的简写 |
技巧
- %06d,表示输出的整数显示位数,不足以0补全,超出当前位数则原样输出
- %.2f,表示小数点后显示的小数位数。
age = 18
name = 'BLQ'
weight = 75.5
student_id = 1
print('我的名字是%s' % name)
print('我的学号是%4d' % student_id)
print('我的体重是%.2f公斤' % weight)
print('我的名字是%s,今年%d岁了' % (name, age))
print('我的名字是%s,明年%d岁了' % (name, age + 1))
print(f'我的名字是{name}, 明年{age + 1}岁了')
拓展:format
变形
{}.fomat()
8.数据转换
函数 | 说明 |
---|---|
int(x [,base ]) | 将x转换为一个整数 |
float(x) | 将x转换为一个浮点数 |
complex(real [,imag ]) | 创建一个复数,real为实部,imag为虚部 |
str(x) | 将对象 x 转换为字符串 |
repr(x) | 将对象 x 转换为表达式字符串 |
eval(x) | 用来计算在字符串中的有效Python表达式,并返回一个对象 |
tuple(x) | 将序列 s 转换为一个元组 |
list(x) | 将序列 s 转换为一个列表 |
chr(x) | 将一个整数转换为一个Unicode字符 |
ord(x) | 将一个字符转换为它的ASCII整数值 |
hex(x) | 将一个整数转换为一个十六进制字符串 |
oct(x) | 将一个整数转换为一个八进制字符串 |
bin(x) | 将一个整数转换为一个二进制字符串 |
print(int('1010', 2)) # 输出: 10
print(int('12', 8)) # 输出: 10
print(int('A', 16)) # 输出: 10
# 默认十进制
print(int('123')) # 输出: 123
# eval()
str1 = '10'
str2 = '[1, 2, 3]'
str3 = '(1000, 2000, 3000)'
print(type(eval(str1)))
print(type(eval(str2)))
print(type(eval(str3)))
# complex()
# 创建实部为 1,虚部为 2 的复数对象
z1 = complex(1, 2)
print("z1:", z1)
# 创建实部为 2,虚部为默认值 0 的复数对象
z2 = complex(2)
print("z2:", z2)
# 创建实部为默认值 0,虚部为 -4 的复数对象
z3 = complex(imag=-4)
print("z3:", z3)
# repr()
x = 10
print(repr(x)) # 输出: '10'
y = [1, 2, 3]
print(repr(y)) # 输出: '[1, 2, 3]'
二.条件 循环
1.条件
i. if else elif
# if语句
if 1 == 1:
print("true")
else:
print("false")
# elif语句
a = 1
b = int(input("请输入一个数字:"))
if a > b:
print("a>b")
elif a < b:
print("a<b")
else:
print("a=b")
ii.嵌套
# 计算偶数的平方,只保留平方值大于100的结果
if x % 2 ==0:
if x**2 > 100:
print(x)
iii*.三目运算符
# 值1 if 条件 else 值2
a = 1
b = 2
c = a if a > b else b
print(c)
2.循环
# for循环
for i in range(1 ,10):
print(i)
# while循环
i = 1
while (i < 10):
print(i)
i += 1
小练习:
1.100以内的奇数和
2.10以内的阶乘和
3.break和continue
# break退出循环 (遇到第一个7的时候跳出循环)
for i in range(1 ,100):
if i%7 ==0:
print(i)
# continue跳出当前循环 (输出99以内除7的倍数以外的数)
for i in range(1 ,100):
if i % 7 ==0:
print(i)
三.字符串 列表 元组 字典 集合
1.字符串
1.1 索引
a = "blq"
b = 'blq123'
print(a[0])
print(a[1])
print(b[0])
1.2 切片
a = "blq"
b = 'blq123'
print(a[0:1])
print(a[1:])
print(b[::-1])
print(b[:4:2])
1.3 函数
1.3.1 find()
- find():检测某个子串是否包含在这个字符串中,如果在返回这个子串开始的位置索引,否则则返回-1。
字符串序列.find(子串, 开始位置索引, 结束位置索引)
注意:开始和结束位置索引可以省略,表示在整个字符串序列中查找。
a = 'wo zai blq wo zi hao'
print(a.find('wo'))
print(a.find('blq',1,11))
print(a.find('qw'))
1.3.2 index()
- index():检测某个子串是否包含在这个字符串中,如果在返回这个子串开始的位置索引,否则则报异常。
字符串序列.index(子串, 开始位置索引, 结束位置索引)
注意:开始和结束位置索引可以省略,表示在整个字符串序列中查找。
a = 'wo zai blq wo zi hao'
print(a.index('wo'))
print(a.index('blq',1,11))
print(a.index('qw')) # error
拓展:
- rfind(): 和find()功能相同,但查找方向为右侧开始。
- rindex():和index()功能相同,但查找方向为右侧开始。
1.3.3 count()
- count():返回某个子串在字符串中出现的次数
字符串序列.count(子串, 开始位置索引, 结束位置索引)
注意:开始和结束位置索引可以省略,表示在整个字符串序列中查找。
a = 'wo zai blq wo zi hao'
print(a.count('wo'))
print(a.count('blq',1,11))
print(a.count('qw')) # 0
1.3.4 replace()
- replace():替换
字符串序列.replace(旧子串, 新子串, 替换次数)
注意:不设置替换次数默认全部替换。
a = 'wo zai blq wo zi hao'
print(a.replace('wo','wo men'))
1.3.5 split()
- split():按照指定字符分割字符串。
字符串序列.split(分割字符, num)
注意:num表示的是分割字符出现的次数,即将来返回数据个数为num+1个。
a = 'wo zai blq wo zi hao'
print(a.split(' ')) # ['wo', 'zai', 'blq', 'wo', 'zi', 'hao']
print(a.split('zai')) # print(a.split('zai'))
# a = list(map(int, input().split()))
注意:如果分割字符是原有字符串中的子串,分割后则丢失该子串。
1.3.6 join()
- join():用一个字符或子串合并字符串,即是将多个字符串合并为一个新的字符串。
字符或子串.join(多字符串组成的序列)
注意:如果需要包含非字符串元素,需要先将它们转换为字符串
list = ['wo', 'zai', 'blq', 'wo', 'zi', 'hao']
print(' '.join(list))
1.3.7 capitalize()
- capitalize():将字符串第一个字符转换成大写。
1.3.8 tiltle()
- title():将字符串每个单词首字母转换成大写。
1.3.9 lower() upper()
- lower():将字符串中大写转小写。
- upper():将字符串中小写转大写。
1.3.10 删除空白
- lstrip():删除字符串左侧空白字符。
- rstrip():删除字符串右侧空白字符。
- strip():删除字符串两侧空白字符。
1.3.11 ljust()
- ljust():返回一个原字符串左对齐,并使用指定字符(默认空格)填充至对应长度 的新字符串。
字符串序列.ljust(长度, 填充字符)
a = 'blq'
print(a.ljust(10, '-')) # blq-------
print(a.rjust(10, '-')) # -------blq
print(a.center(10, '-')) # ---blq----
- rjust():返回一个原字符串右对齐,并使用指定字符(默认空格)填充至对应长度 的新字符串,语法和ljust()相同。
- center():返回一个原字符串居中对齐,并使用指定字符(默认空格)填充至对应长度 的新字符串,语法和ljust()相同
1.3.12 判断函数(startwith() endwith() isalpha() isdigit() isalnum() isspace())
- startswith():检查字符串是否是以指定子串开头,是则返回 True,否则返回 False。如果设置开始和结束位置索引,则在指定范围内检查。
# 字符串序列.startswith(子串, 开始位置下标, 结束位置下标)
a = 'wo zai blq wo zi hao'
print(a.startswith('wo')) # True
print(a.startswith('w')) # True
- endswith()::检查字符串是否是以指定子串结尾,是则返回 True,否则返回 False。如果设置开始和结束位置索引,则在指定范围内检查。
字符串序列.endswith(子串, 开始位置索引, 结束位置索引)
a = 'wo zai blq wo zi hao'
print(a.endswith('wo')) # False
print(a.endswith('o')) # True
isalpha():如果字符串至少有一个字符并且所有字符都是字母则返回 True, 否则返回 False。
isdigit():如果字符串只包含数字则返回 True 否则返回 False。
isalnum():如果字符串至少有一个字符并且所有字符都是字母或数字则返 回 True,否则返回 False。
isspace():如果字符串中只包含空白,则返回 True,否则返回 False。
2.列表
列表可以一次性存储多个数据,且可以为不同数据类型
2.1 索引
a = [1, 2, 3, 4, 5]
print(a[0])
2.2 切片
a = [1, 2, 3, 4, 5]
print(a[0:1])
print(a[1:])
print(b[::-1])
print(b[:4:2])
2.3 函数
2.3.1 index() count() len()
- index():返回指定数据所在位置的下标 。
列表序列.index(数据, 开始位置索引, 结束位置索引)
a = [1, 2, 3, 4, 5]
print(a.index(1, 0, 2))
注意:如果查找的数据不存在则报错。
- count():统计指定数据在当前列表中出现的次数。
a = [1, 1, 3, 4, 5]
print(a.count(1))
- len():访问列表长度,即列表中数据的个数
a = [1, 1, 3, 4, 5]
print(len(a))
2.3.2 in / not in
a = [1, 1, 3, 4, 5]
print(1 not in a) # False
2.3.3 append() extend() insert()
- append():列表结尾追加数据。
列表序列.append(数据)
a = [1, 1, 3, 4, 5]
a.append(6)
print(a)
列表追加数据的时候,直接在原列表里面追加了指定数据,即修改了原列表,故列表为可变类型数据。
注意
如果append()
追加的数据是一个列表,则追加整个序列到列表
a = [1, 1, 3, 4, 5]
b = [6, 7]
a.append(b)
print(a) # [1, 1, 3, 4, 5, [6, 7]]
- extend():列表结尾追加数据,如果数据是一个序列,则将这个序列的数据逐一添加到列表。
列表序列.extend(数据)
a = [1, 1, 3, 4, 5]
b = [6, 7]
a.extend(b)
print(a) # [1, 1, 3, 4, 5, 6, 7]
- insert():指定位置新增数据。
列表序列.insert(位置索引, 数据)
a = [1, 1, 3, 4, 5]
a.insert(2, 6)
print(a) # [1, 1, 6, 3, 4, 5]
2.3.4 pop() remove() del() clear()
- del
del 目标
可以删除整个列表,也可以是列表中的某一元素
a = [1, 1, 3, 4, 5]
del a
print(a) # name 'a' is not defined
a = [1, 1, 3, 4, 5]
del a[0]
print(a) # [1, 3, 4, 5]
注意: 删除后无法在访问
- pop():删除指定下标的数据(默认为最后一个),并返回该数据。
列表索引.pop(下标)
a = [1, 1, 3, 4, 5]
a.pop()
print(a) # [1, 1, 3, 4]
注意: pop()默认删除列表末尾的元素,并能继续使用(即可以把返回值赋给某一变量 b=a.pop()),出栈
- remove():移除列表中某个数据的第一个匹配项。
列表序列.remove(数据)
a = [1, 1, 3, 4, 5]
a.remove(5)
print(a) # [1, 1, 3, 4]
注意: remove()直接删除值,不需要知道索引删除后仍可以继续使用
- clear():清空列表 = del 列表名
2.3.5 reverse() sort()/sorted() copy()
- 倒置:reverse()
a = [1, 1, 3, 4, 5]
a.reverse()
print(a)
- 排序:sort()/sorted()
- 语法
列表序列.sort( key=None, reverse=False)
注意:reverse表示排序规则,reverse = True 降序, reverse = False 升序(默认)
区别
sort
永久排序
sorted
临时排序
a = [1, 4, 2, 5, 3]
a.sort()
print(a) # [1, 2, 3, 4, 5]
b = [1, 4, 2, 5, 3]
print(sorted(b)) # [1, 2, 3, 4, 5]
print(b) # [1, 4, 2, 5, 3]
# 可见b本身没有改变
- copy
将当前的列表复制一份相同的列表,新列表与旧列表内容相同,但内存空间不同
copy分为浅拷贝和深拷贝两种
用法:
list.copy() -> 该函数无参数,返回一个一模一样的列表
示例:
old_list = ['a','b','c']
new_list = old_list.copy()
print(new_list)
问:既然python支持多次赋值,那么为什么不直接二次赋值来进行列表的拷贝呢?
二次赋值的变量与原始变量享有相同的内存空间
copy函数创建的新列表与原始列表不是一个内存空间,不享有数据变更
copy函数在功能上属于浅拷贝
print('浅拷贝:')
a = [[1, 2, 3], [5, 6, 7]]
print('a:', a) # a: [[1, 2, 3], [5, 6, 7]]
b = a.copy()
print('b:', b) # b: [[1, 2, 3], [5, 6, 7]]
b[0].append(10)
print('b:', b) # b: [[1, 2, 3, 10], [5, 6, 7]]
print('a:', a) # a: [[1, 2, 3, 10], [5, 6, 7]]
从以上代码可以发现,当拷贝的列表b发生变化是,被拷贝的列表a也随之变化,二者休戚与共
深拷贝含义:不仅对第一层数据,进行了copy,对深层的数据也进行copy,原始变量和新变量完完全全不共享数据,叫做深拷贝,(深拷贝:拷贝对象及其子对象,修改一个不会影响另一个)
import copy
print('深拷贝:')
a = [[1, 2, 3], [4, 5, 6]]
b = copy.deepcopy(a)
print('b', b) # b [[1, 2, 3], [4, 5, 6]]
b[0].append(10)
print('b:', b) # b: [[1, 2, 3, 10], [4, 5, 6]]
print('a:', a) # a: [[1, 2, 3], [4, 5, 6]]
问:那么深拷贝和简单或二次赋值有什么区别?
比如说 a 是一个列表,b 是深拷贝 a 的列表,c 是 a 的赋值对象(c=a), 那么二者的区别就是,a变c变b不变
3.字典
字典特点:
- 符号为大括号
- 数据为键值对形式出现
- 各个键值对之间用逗号隔开
3.1 函数
3.1.1 pop() del clear()
#字典的函数
a = dict()
a['name'] = 'blq'
a['age'] = 18
print(a)
a.pop('name') # 删除键为name的值
del a['name']
print(a)
a.clear() # 清空字典
print(a)
3.2 get()
字典序列.get(key, 默认值)
a = dict()
a['name'] = 'blq'
a['age'] = 18
print(a.get('age'))
3.3 keys()
a = dict()
a['name'] = 'blq'
a['age'] = 18
print(a.keys()) # dict_keys(['name', 'age'])
3.4 values()
a = dict()
a['name'] = 'blq'
a['age'] = 18
print(a.values()) # dict_values(['blq', 18])
3.5 items()
a = dict()
a['name'] = 'blq'
a['age'] = 18
print(a.items()) # dict_items([('name', 'blq'), ('age', 18)])
3.2 循环遍历
a = dict()
a['name'] = 'blq'
a['age'] = 18
for key in a.keys():
print(key)
for value in a.values():
print(value)
for item in a.items():
print(item)
4.元组
一个元组可以存储多个数据,元组内的数据是不能修改的。
# 多个数据元组
t1 = (10, 20, 30)
# 单个数据元组
t2 = (10,)
注意:如果定义的元组只有一个数据,那么这个数据后面也好添加逗号,否则数据类型为唯一的这个数据的数据类型
t2 = (10,)
print(type(t2)) # tuple
t3 = (20)
print(type(t3)) # int
t4 = ('hello')
print(type(t4)) # str
元组数据只支持查找
- 按下标查找数据
t = ('a', 'b', 'c', 'd')
print(t[0]) # a
- index():查找某个数据,如果数据存在返回对应的下标,否则报错,语法和列表、字符串的index方法相同。
t = ('a', 'b', 'c', 'd')
print(t.index('a')) # 0
- count():统计某个数据在当前元组出现的次数。
t = ('a', 'b', 'c', 'c')
print(t.count('c')) # 2
- len():统计元组中数据的个数。
t = ('a', 'b', 'c', 'd')
print(len(t)) # 4
注意:元组内的直接数据如果修改则立即报错
t = ('aa', 'bb', 'cc', 'bb')
t[0] = 'a1'
但是如果元组里面有列表,修改列表里面的数据则是支持的。
t2 = (1, 2, ['a', 'b', 'c'], 3, 4)
print(t2[2])
t2[2][0] = 'aaaaa'
print(t2)
5.集合
宽泛的来讲集合就是不含键值对的字典,但是集合里的数据具有唯一性 和高中数学里的集合一样
5.1 创建
空集合:
只能用set()
函数,{}
被用来表示空字典
非空集合:
{1,2,3,4,5,6}
特点:
- 集合可以去掉重复数据;
- 集合数据是无序的,故不支持索引
5. 2 函数
add()
s1 = {1, 2}
s1.add(3)
s1.add(3)
print(s1)
因为集合有去重功能,所以,当向集合内追加的数据是当前集合已有数据的话,则不进行任何操作。
update()
追加的数据是序列。
s1 = {1, 2}
s1.update([3, 4])
s1.update('abc')
print(s1) # {'a', 1, 2, 'b', 'c'}
remove()
删除集合中的指定数据,如果数据不存在则报错。
s1 = {1, 2}
s1.remove(1)
print(s1)
s1.remove(1) # 报错
print(s1)
discard()
删除集合中的指定数据,如果数据不存在也不会报错。
s1 = {1, 2}
s1.discard(1)
print(s1)
s1.discard(1)
print(s1)
pop()
随机删除集合中的某个数据,并返回这个数据
注:pop()函数在集合里貌似不合法,少用
s1 = {1, 2, 3, 4, 5}
x = s1.pop()
print(x) # 1
5.3 运算
# 集合
a = {1, 2, 3, 4, 5}
print(a)
b = {4, 5, 6, 7, 8}
print(b)
print(a & b) # 交集
print(a | b) # 并集
print(a - b) # 差集
print(a ^ b) # 对称差集 A△B={x|x∈A∪B,x∉A∩B}
6. 公共操作 / 方法
运算符 | 描述 | 支持的容器类型 |
---|---|---|
+ | 合并 | 字符串、列表、元组 |
* | 复制 | 字符串、列表、元组 |
in | 元素是否存在 | 字符串、列表、元组、字典 |
not in | 元素是否不存在 | 字符串、列表、元组、字典 |
函数 | 描述 |
---|---|
len() | 计算容器中元素个数 |
del 或 del() | 删除 |
max() | 返回容器中元素最大值 |
min() | 返回容器中元素最小值 |
range(start, end, step) | 生成从start到end的数字,步长为 step,供for循环使用 |
enumerate() | 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。 |
enumerate()
- 语法
enumerate(可遍历对象, start=0)
注意:start参数用来设置遍历数据的下标的起始值,默认为0。
l = ['a', 'b', 'c', 'd', 'e']
for i in enumerate(l):
print(i)
for index, char in enumerate(l, start=1):
print(f'索引是{index}, 对应的字符是{char}')
7. 推导式(拓展)
7.1 列表推导式
l1 = [i for i in range(10)]
l2 = [i for i in range(0, 10, 2)]
l3= [i for i in range(10) if i % 2 == 0]
l4 = [(i, j) for i in range(1, 3) for j in range(3)]
7.2 字典推导式
1.创建一个字典:字典key是1-5数字,value是这个数字的2次方。
dict1 = {i: i**2 for i in range(1, 5)}
print(dict1) # {1: 1, 2: 4, 3: 9, 4: 16}
2.将两个列表合并为一个字典
list1 = ['name', 'age', 'gender']
list2 = ['Tom', 20, 'man']
dict1 = {list1[i]: list2[i] for i in range(len(list1))}
print(dict1)
3.提取字典中目标数据
counts = {'MBP': 268, 'HP': 125, 'DELL': 201, 'Lenovo': 199, 'acer': 99}
# 需求:提取上述电脑数量大于等于200的字典数据
count1 = {key: value for key, value in counts.items() if value >= 200}
print(count1) # {'MBP': 268, 'DELL': 201}
7.3 集合推导式
需求:创建一个集合,数据为下方列表的2次方。
list1 = [1, 1, 2]
代码如下:
list1 = [1, 1, 2]
set1 = {i ** 2 for i in list1}
print(set1) # {1, 4}
注意:集合有数据去重功能。
7.4 总结
# 列表推导式
[xx for xx in range()]
# 字典推导式
{xx1: xx2 for ... in ...}
# 集合推导式
{xx for xx in ...}
四.函数
无参函数
# 函数
def func():
print("hello world")
func()
有参函数
def func1(a, b):
print(a + b)
print(func1(1, 2))
五.总结
好啦本篇博文也是完结了,欢迎各位来到玻璃球,让我们共同进步!
本篇博文只是大致写了一下python基础的东西,像lambda表达式,解包之类并无,可能会在下一篇博文里补充。