贺兰网站建设,网站建设进度计划表,五个h5制作网站,wordpress文章页503本学习笔记为阿里云天池龙珠计划Python训练营的学习内容#xff0c;学习链接为#xff1a;https://tianchi.aliyun.com/specials/promotion/aicamppython?spm5176.22758685.J_6770933040.1.6f103da1tESyzu
目录
一、学习知识点概要
二、学习内容
I.列表#xff08;list…本学习笔记为阿里云天池龙珠计划Python训练营的学习内容学习链接为https://tianchi.aliyun.com/specials/promotion/aicamppython?spm5176.22758685.J_6770933040.1.6f103da1tESyzu
目录
一、学习知识点概要
二、学习内容
I.列表list
1.定义
2.创建列表 3.列表的添加、删除操作
4.列表元素选取
5.列表常用操作符
6.列表的其他方法
II.元组tuple
1.定义
2.创建元组 3.元组的更新和删除
4. 元组常用操作符
5.元组的内置方法
6.解压元组
III.字符串str
1.定义
2.字符串常用转义字符
3.字符串的索引和切片
4.字符串的操作符
5.字符串的内置方法
6.字符串格式化
IV.字典dict
1.定义
2.创建和索引
3.字典的内置方法
V.集合set
1.定义
2.创建
2.访问集合中的值
3.集合的内置方法
4.不可变集合frozenset
VI.序列
三、学习问题与解答
四、学习思考与总结 一、学习知识点概要
本次主要学习Python中的容器序列类型包括
列表list元组tuple字符串str字典dict集合set
二、学习内容
I.列表list
1.定义
列表(list)为有序集合可以保存任意类型的对象语法为[元素1,元素2,……,元素n]。列表的语法点在于用中括号“[]”将元素放在一起用逗号“,”将元素隔开
2.创建列表
列表可以通过直接赋值创建也可以用内置方法list(sub)把可迭代对象sub转化为列表其中sub可以为range对象、字符串等。此外在上次的学习中学习的列表推导式也可以用于创建列表,例如
a[1,2,Python,True] #直接赋值创建列表元素为任意对象列表中保存的是对象的引用
print(a,type(a))#运行结果#[1,2,Pthon,True] classlistblist(range(1,11)) #通过list()方法将range对象转换为列表
print(b,type(b))#运行结果#[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] class listc[i*2 for i in b] #通过推导式创建列表
print(c,type(c))#运行结果#[2, 4, 6, 8, 10, 12, 14, 16, 18, 20] class listd[] #创建空列表之后可以用list类的内置方法添加元素详见下文f[[1,2,3]]*3 #列表的元素也可以是容器类型
print(f,type(f)) #*3的操作意为将创建了3份原列表的引用看似是3个相同的列表拼在了一起
f[0][1]5 #其实这3个相同列表的引用都是一样的都指向原列表
print(f,type(f)) #只要一个列表产生变化原列表就会变化其他被拼接起来的列表也会变化#运行结果#[[1, 2, 3], [1, 2, 3], [1, 2, 3]] class list#[[1, 5, 3], [1, 5, 3], [1, 5, 3]] class list 3.列表的添加、删除操作
列表中有一些内置方法可对列表进行添加或删除元素的操作。这些操作对列表的id不产生影响这表明列表是可变的。字典和集合也是可变的而数值、元组、字符串是不可变的。
判断一个数据可不可变可以用hash()方法判断如果参数的数据类型是可变的那么就会报错。
(1)添加元素
list.append(obj)在列表末尾添加新的对象只接受一个参数参数可以是任何数据类型被追加的元素在 list 中保持着原结构类。append()方法一次只添加一个元素若参数obj为一个列表那么这个列表会作为一个整体添加到 list 中list.extend(seq)在列表末尾一次性追加另一个序列中的多个值参数seq为列表此方法用新列表seq拓展原列表list。相当于把seq接到list的末尾是对list的操作无返回值list.insert(index,obj)在编号index的位置插入元素obj。对参数obj的要求和append()一样index表示第几个间隔index从0数起。
例程
xlist(range(1,6))
print(x) #运行结果:[1,2,3,4,5]x.append(6) #在末尾添加元素6
print(x) #运行结果:[1,2,3,4,5,6]x.append([7,8]) #参数obj为列表将列表整体当作一个元素添加到末尾
print(x) #运行结果:[1,2,3,4,5,6,[7,8]]x.extend([9,10]) #用列表[9,10]拓展x即将[9,10]中的所有元素添加到x的末尾
print(x) #运行结果:[1,2,3,4,5,6,[7,8],9,10]x.insert(0,Numbers) #在第0个间隔之间(即最左端)插入字符串Numbers
print(x) #运行结果:[Numbers,1,2,3,4,5,6,[7,8],9,10]
(2)删除元素
list.remove(obj)删除列表中第一个与obj相同的元素。remove()方法为对list的一项操作无返回值list.pop([index-1])返回并删除列表中index位置的元素。index为可选参数表示列表的索引索引相关详见下文。pop()方法默认取出列表中的最后一个元素del语句可以用于删除单个或多个列表对象。具体用法为 del list[var1]或del list[start:end:step]。del 语句原本就可以用于删除变量若del 后面写的是列表则删除整个列表若写的是列表的切片则删除列表中相对应的元素。
例程
x[I,Love,Python,1,2,3]
print(x,type(x)) #运行结果:[I,Love,Python,1,2,3] classlistx.remove(I) #删除x中的I
print(x) #运行结果:[Love, Python, 1, 2, 3]yx.pop() #从x中取出最后一个元素赋给y
print(x,x,\ny,y,sep) #运行结果:x[Love, Python, 1, 2]# y3del x[2],x[2] #删除x中的第3个元素依次执行
print(x) #注意del语句后的删除对象是依次执行的先执行完一次#删除x[2]后x[3]就没有了然后再执行一次删除x[2]
#运行结果[Love, Python]
4.列表元素选取
(1)索引
可以通过list[index]的方式表示列表list中的元素index为索引值整数从0开始。
若index为负数则从右到左数起。例如list[-1]是列表list的最后一个元素list[-2]是列表list的倒数第二个元素。
(2)切片
切片是一种一次性从列表里进行多个索引的方式写法为list[start:end:step1]start为选取的第一个元素end为选取的最后一个元素step为步长默认为1。切片有四种用法
list[start:] 从start位置开始选取后面的所有元素list[:end] 从第一个元素开始选取到end位置的前一个元素含头不含尾list[start:end] 从start位置开始选取到end位置的前一个元素list[start:end:step] 从start位置开始每隔step个间隔选取一个元素直到end位置为止不含end位置上的元素list[:] 选取所有元素进行浅拷贝
例如
xlist(range(1,11))
print(x) #[1,2,3,4,5,6,7,8,9,10]
print(x[5:]) #[6,7,8,9,10]
print(x[:7]) #[1,2,3,4,5,6,7]
print(x[2:7]) #[3,4,5,6,7]
print(x[0:8:2]) #[1,3,5,7]yx[:] #y为x的浅拷贝
zx #z为x的深拷贝
x[0]11
print(y) #[1,2,3,4,5,6,7,8,9,10]
print(z) #[11,2,3,4,5,6,7,8,9,10]浅拷贝是将列表的各个元素的引用依次给新的列表而深拷贝则是将列表的引用直接赋给新的列表这就导致对原本的列表进行操作时浅拷贝出来的列表不会受到影响而深拷贝出来的列表会和原列表一致。
5.列表常用操作符 用于判断两个列表是否相等只有当对应位置上的元素都相等才返回True 用于拼接两个列表* 后面接整数n用于把原列表重复n次形成新列表若n小于或等于0则生成空列表in 判断元素是否在列表内not in 判断元素是否不在列表内
将两个list相加需要创建新的 list 对象从而需要消耗额外的内存特别是当 list 较大时尽量不要使用 “” 来添加list。
6.列表的其他方法
list.count(obj) 统计obj元素在list列表中出现多少次list.index(obj,[start[,end]]) 返回obj元素在list列表里[start:end]范围内第一次出现的索引值list.reverse() 将列表list里的元素反方向排列对list直接操作无返回值list.sort(keyNone,reverseFalse) 将列表进行排序。key主要是用来进行比较的元素只有一个参数具体的函数的参数就是取自于可迭代对象中指定可迭代对象中的一个元素来进行排序。reverse排序规则为True时降序为False时升序默认。
例如
x[1,2,3]*4
print(x) #[1,2,3,1,2,3,1,2,3,1,2,3]print(x.count(1)) #计1出现的次数#4print(x.index(2,2,6)) #在下表[2,6]的范围内检查2第一次出现的下标#4x.reverse() #将x反向排序
print(x) #[3,2,1,3,2,1,3,2,1,3,2,1]x.sort() #将x排序
print(x) #[1,1,1,1,2,2,2,2,3,3,3,3]
II.元组tuple
1.定义
与列表类似不同点在于元组用小括号()将元素绑在一起元组不可修改。与列表类似元组也可以用整数进行索引和切片。
2.创建元组
元组可以直接赋值创建赋值时若有多个元素可以不加小括号若只有一个元素则需要在元素后面加上一个逗号否则会被认为是其他数据类型元组可以用内置方法tuple(sub)将可迭代对象对象sub转化为元组可以用小括号创建空元组可以用推导式创建可迭代对象再转换成元组
例
a(4,5,6) #直接赋值创建元组
print(a,type(a)) #(4, 5, 6) class tupleb(1,) #单个元素创建元组需要在元素后面加上逗号
c(1)
d1,2,3 #多个元素时可以不加小括号
print(type(b),type(c),type(d),sep\n) #class tuple#class int#class tupleftuple(range(1,6)) #用tuple()方法把range对象转换为元组
print(f,type(f)) #(1, 2, 3, 4, 5) class tupleg() #创建空元组
print(g,type(g)) #() class tuplehtuple((i*3 for i in f)) #推导式创建可迭代对象再转换成元组
print(h,type(h)) #(3, 6, 9, 12, 15) class tuple3.元组的更新和删除
元组有不可更改的性质因此不能直接给元组的元素赋值但是只要元组中的元素可更改那么我们可以直接更改其元素注意这跟赋值其元素不同。列表、字典、集合可以改变
例
a(1,2,3,[4,5,6])
a[3][0]8
print(a,type(a)) #(1, 2, 3, [8, 5, 6]) class tupledel a[3][0]
print(a,type(a)) #(1, 2, 3, [5, 6]) class tuple4. 元组常用操作符
元组的常用操作符有「」「」「*」「in」「not in」。用法与列表的操作符相同此处不作赘述。
5.元组的内置方法
由于元组的不可改变性元组的内置方法只有count()和index()。用法也与列表的count()和index()相同此处不作赘述。
6.解压元组
通过(变量1 , 变量2 , …… , 变量n)元组 的方式可以将元组中的元素依次付给等号左边的变量等号左边的括号结构要与元组的结构相同长度、维度
如果你只想要元组其中几个元素用通配符「*」英文叫 wildcard在计算机语言中代表一个或多个元素。下例就是把多个元素丢给了 rest 变量。如果你根本不在乎 rest 变量那么就用通配符「*」加上下划线「_」。
例
x(1,2,Python,[10.2,6])
(a,b,c,[d,f])x
print(a,b,c,d,f) #1 2 Python 10.2 6ytuple(range(1,6))
q,w,*rest,ry
print(q,w,r) #1 2 5
print(rest) #[3, 4] rest为一个列表t1,2,3,4,5
a,b,*_t
print(a,b) # 1 2
III.字符串str
1.定义
字符串为用引号之间的字符集合可以用单引号也可以用双引号。例如 Python S-PLUS都是字符串。
2.字符串常用转义字符
由于反斜杠「\」、单引号「」、双引号「」在字符串中有特殊性因此如果要在字符串中出现这三个符号需要在前面再加上一个反斜杠。
\\ 反斜杠\ 单引号\ 双引号\n 换行符\r 回车符\t 横向制表符
若要表示原始字符串则只需在字符串之前加上小字母「r」即可。
三引号允许一个字符串跨多行字符串中可以包含换行符、制表符以及其他特殊字符。
例
print(I\nLove\nPython)
#I
#Love
#Pythonprint(rI\nLove\nPython)
#I\nLove\nPythonpara_str 这是一个多行字符串的实例
多行字符串可以使用制表符
TAB ( \t )。
也可以使用换行符 [ \n ]。print(para_str)
# 这是一个多行字符串的实例
# 多行字符串可以使用制表符
# TAB ( )。
# 也可以使用换行符 [
# ]。3.字符串的索引和切片
字符串的索引和切片与列表和元组的类似每一个字符都为字符串的元素此处不作赘述。
4.字符串的操作符
字符串的操作符也为「」「」「*」「in」「not in」用法与列表和元组相同。
5.字符串的内置方法
str.capitalize() 返回一个新字符串将字符串的第一个字符转换为大写其他的转为小写str.lower() 返回一个新字符串转换字符串中所有大写字符为小写str.upper() 返回一个新字符串转换字符串中所有大写字符为大写str.swapcase() 返回一个新字符串将字符串中大写转换为小写小写转换为大写str.count(str1,beg0,endlen(str)) 统计字符串str1在str的指定范围(beg,end)出现的次数str.endswith(suffix, beg0, endlen(string)) 检查指定范围内的字符串是否以suffix结束str.startswith(substr, beg0,endlen(string)) 检查指定范围内的字符串是由以substr开始str.find(str1, beg0, endlen(string)) 从左查找str1在指定范围字符串内的位置返回索引值若str1不在指定范围内则返回-1str.rfind(str, beg0,endlen(string)) 与find()类似从右开始查找str.isnumeric() 如果字符串中只包含数字字符则返回 True否则返回 Falsestr.ljust(width[,fillchar ]) 返回一个新字符串用fillchar扩充原字符串至长度width为止原字符串向左对齐str.rjust(width[,fillchar ]) 和ljust()类似原字符串向右对齐str.lstrip([chars]) 删除字符串左边的空格或指定字符str.rstrip([chars]) 删除字符串右边的空格或指定字符str.strip([chats]) 执行lstrip()和rstrip()str.partition(sub) 找到子字符串sub把字符串分为一个元组(左边的字符串,sub,右边的字符串)如果字符串中不包含sub则返回(原字符串,,)str.rpartition(sub) 与partition()类似从右边开始查找str.replace(old,new[,max]) 把将字符串中的old替换成new如果max指定则替换不超过max次str.split(str ,num) 不带参数默认是以空格为分隔符分开字符串如果num参数有设置则仅分隔num个子字符串返回切片后的子字符串拼接的列表str.splitlines([keepends]) 如果字符串按照行(\r, \r\n, \n)分隔返回一个包含各行作为元素的列表如果参数keepends为 False不包含换行符如果为 True则保留换行符str.maketrans(intab,outtab) 创建字符映射的转换表第一个参数是字符串表示需要转换的字符第二个参数也是字符串表示转换的目标。str.translate(table,deletechars) 根据参数table给出的表转换字符串的字符要过滤掉的字符放到deletechars参数中。
6.字符串格式化
可以用str.format()格式化方法进行格式化例如
str8 {0} Love {1}.format(I, Lsgogroup) # 位置参数
print(str8) # I Love Lsgogroupstr8 {a} Love {b}.format(aI, bLsgogroup) # 关键字参数
print(str8) # I Love Lsgogroupstr8 {0} Love {b}.format(I, bLsgogroup) # 位置参数要在关键字参数之前
print(str8) # I Love Lsgogroupstr8 {0:.2f}{1}.format(27.658, GB) # 保留小数点后两位
print(str8) # 27.66GB
格式化符号
符 号描述%c格式化字符及其ASCII码%s格式化字符串用str()方法处理对象%r格式化字符串用rper()方法处理对象%d格式化整数%o格式化无符号八进制数%x格式化无符号十六进制数%X格式化无符号十六进制数大写%f格式化浮点数字可指定小数点后的精度%e用科学计数法格式化浮点数%E作用同%e用科学计数法格式化浮点数%g根据值的大小决定使用%f或%e%G作用同%g根据值的大小决定使用%f或%E
例
print(%c % 97) # a
print(%c %c %c % (97, 98, 99)) # a b c
print(%d %d %d % (4, 5, 9)) # 4 5 9
print(我叫 %s 今年 %d 岁! % (小明, 10)) # 我叫 小明 今年 10 岁!
print(%o % 10) # 12
print(%x % 10) # a
print(%X % 10) # A
print(%f % 27.658) # 27.658000
print(%e % 27.658) # 2.765800e01
print(%E % 27.658) # 2.765800E01
print(%g % 27.658) # 27.658
text I am %d years old. % 22
print(I said: %s. % text) # I said: I am 22 years old..
print(I said: %r. % text) # I said: I am 22 years old.
格式化操作符辅助命令
符号功能m.nm 是显示的最小总宽度,n 是小数点后的位数如果可用的话-用作左对齐在正数前面显示加号( )#在八进制数前面显示零(0)在十六进制前面显示0x或者0X(取决于用的是x还是X)0显示的数字前面填充0而不是默认的空格
例
print(%5.1f % 27.658) # 27.7
print(%.2e % 27.658) # 2.77e01
print(%10d % 10) # 10
print(%-10d % 10) # 10
print(%d % 10) # 10
print(%#o % 10) # 0o12
print(%#x % 108) # 0x6c
print(%010d % 5) # 0000000005
IV.字典dict
1.定义
字典是无序的由大括号绑起来的(key:value)键值对集合语法结构为{key1:value1,key2:value2, …… ,key n:value n}同一字典内的键(key)是不重复的字典用不可变数据作为键而值没有这个要求字典内的排放顺序与键的放入顺序无关字典的每一个元素为(key:value)键值对冒号用于分开键和值
2.创建和索引
字典可以通过直接赋值创建也可以用推导式创建还可以用dict()创建一个字典。
dict()内的参数可以是n×2维的列表列表内的元素为二维的元组这样会将元组的两个元素分别作为键值对创建字典
也可以直接用dict(key1value1,key2value2, ……)的方式创建字典但是这样的字典的键只能是字符串
例
dic{李宁:一切皆有可能,耐克: Just do it,阿迪达斯:Impossible is nothing}
print(耐克的口号是:,dic[耐克])# 耐克的口号是: Just do itb{i:i%20 for i in range(10) if i % 3 0} #推导式创建
print(b)
# {0: True, 3: False, 6: True, 9: False}cdict() #创建空字典
c[a]1
c[b]2
print(c)
# {a:1 ,b:2}dic2dict(((apple, 4139), (peach, 4127), (cherry, 4098)))
print(dic2) # {peach: 4127, cherry: 4098, apple: 4139}dic dict(nameTom, age10)
print(dic,type(dic)) # {name: Tom, age: 10} class dict
字典的索引只能通过键来索引语法结构为dict[key]返回的是对应键的值value如果索引的键不存在则会报错。
3.字典的内置方法
dict.fromkeys(seq[,value]) 用于创建一个新字典以序列seq中元素做字典的键value为字典所有键对应的初始值dict.keys() 返回一个可迭代对象可以使用 list() 来转换为列表列表为字典中的所有键dict.values() 与keys()类似不过返回的内容是所有的值dict.items() 以n×2列表的形式返回可遍历的 (键, 值) 元组数组列表元素为元组dict.get(key,defaultNone) 与dict[key]类似返回指定键的值但如果值不在字典中则返回默认值defaultdict.setdefault(key,defaultNone) 与get()类似类似如果键不存在于字典中将会添加键并将值设为默认值in 和 not in 操作符 字典也可以使用in和not in 操作符不过只能检查键key是否在字典中dict.pop(key[,default]) 抛出给定键key对应的值若key不存在则必须设置默认值default并会返回默认值del dict[key] 删除字典中给定的键所在的元素dict.popitem() 随机抛出字典中的一个值若字典为空则会报错dict.clear() 删除字典中的所有元素dict.copy() 返回字典的一个浅拷贝dict.update(dict2) 键字典型参数dict2中的元素更新到dict中
V.集合set
1.定义
集合与字典相似由大括号将元素绑在一起但是集合只保存键(key)由于字典中key不可重复所以集合中也没有重复的元素集合中的元素即key为不可变型数据
2.创建
集合可以通过直接赋值创建也可以用推导式创建还可以用set(value)函数将可迭代对象转换成集合重复元素会被自动过滤。
例
a{1,2,3,4,4} #直接赋值创建集合重复元素自动过滤
print(a,type(a)) #{1, 2, 3, 4} class setb{i*2 for i in range(1,11) if i%30} #推导式创建集合
print(b,type(b)) #{18, 12, 6} class setcset(list(range(5,12))) #set()将列表转化为集合
print(c,type(c)) #{5, 6, 7, 8, 9, 10, 11} class setdset() #创建空集合只能用set()创建
print(d,type(d)) #{} class set
2.访问集合中的值
由于集合的无序性我们不能用索引取得集合中的值但我们仍然可以用一些方法得到一些值
用针对序列的方法len(set)可以返回集合set的大小即元素的个数集合作为可迭代对象也可以用for循环一个个读取出来
例
b{i*2 for i in range(1,11) if i%30}
print(b) #{18, 12, 6}for j in b:print(j) #18#12#6可以用 in 和 not in 操作符判断一个元素是否在集合里
3.集合的内置方法
set.add(elmnt) 用于给集合添加元素如果添加的元素在集合中已存在则不执行任何操作set.update(set2) 与字典的update()方法类似将集合set2中的元素更新到集合set里set.remove(item) 用于移除集合中的指定元素。如果元素不存在则会发生错误set.discard(item) 与remove()类似但不会报错set.pop() 随机抛出一个元素set.intersection(set2) 返回set与set2的交集操作与set set2 相同set.intersection_update(set2) 将set更新为原set和set2的交集set.union(set2) 返回set与set2的并集操作与set | set2 相同set.difference(set2) 返回set与set2的差集操作与set - set2 相同set.difference_update(set2) 将set更新为原set和set2的差集set.symmetric_difference(set2) 返回set与set2的异或操作与set ^ set2 相同也与(set | set2) - (set set2)相同set.symmetric_difference_update(set2) 将set与set2的异或更新到set中set.issubset(set2) 判断set是否被set2包围操作与set set2 相同set.issuperset(set2) 判断set是否包围set2操作与set set2相同set.isdisjoint(set2) 判断set与set2是否不相交不相交则返回True
4.不可变集合frozenset
普通的集合是可变的但是Python提供了实现不可变集合的方法不可变集合与集合不属于同一类不可变集合属于frozenset
不可变集合与普通集合类似但是不能添加或删除元素因此不能用代有update的方法
frozenset([iterable])可以将可迭代对象iterable转换为不可变集合如果没有参数则生成不可变的空集
VI.序列
序列类型包括字符串、列表、元组、集合和字典这些序列支持一些通用的操作但比较特殊的是集合和字典不支持索引、切片、相加和相乘操作。
一般的有转换类型的方法如list()、tuple()和str()等此外还有一些通用的方法
len(s) 返回序列类型s的元素个数长度max(sub) 返回序列或者参数集合中的最大值若sub为字符串则比较ASCII码值min(sub) 返回序列或者参数集合中的最小值sum(iterable[,start0]) 返回序列可迭代对象iterable与可选参数start的总和sorted(iterable,keyNone,reverseFlase) 对所有可迭代对象iterable进行排序操作key和reverse参数和前文提到的sort()方法相同reversed(seq) 返回一个反转的可迭代对象enumerate(sequence[,start0]) 将可枚举的对象序列组合为一个索引序列常用在for循环中zip(iter1 [,iter2 [...]]) 将对象中对应的元素打包成一个个元组然后返回由这些元组组成的对象这样做的好处是节约了不少的内存。若不同对象的长度不同则返回的列表长度与最短的对象相同用*zip()可以将zip对象解压
三、学习问题与解答
本次学习遇到的主要问题是出现的方法很多每种类型的内置方法都很多。遇到的一些具体的问题比如用切片的时候经常会弄不懂是怎么切的我是通过自己上机实验和百度直到切片的一个原则是含头不含尾才弄清楚切片。
四、学习思考与总结
学习编程语言的一个重要的学习方法就是一定要多上手要自己打代码运行才能更好的知道各个操作和方法的作用。