Loading... Python基础语法(一):https://blog.zeruns.tech/index.php/archives/54/ Python基础语法(二):https://blog.zeruns.tech/index.php/archives/112/ Python基础语法(三)——函数:https://blog.zeruns.tech/index.php/archives/150/ ## 列表 ### 基本概念 - 列表是有序的元素集合,所有元素放在一对**中括号**中,用逗号隔开,没有长度限制; - 列表索引值以0为开始值,-1为从未尾的开始位置。 - 列表可以使用+操作符进行拼接,使用*表示重复。 - 当列表元素增加或删除时,列表对象自动进行扩展或收缩内存,保证元素之间没有缝隙; - 列表中的元素可以是不同类型的 ### 列表的使用方式 ```python list = ["zeruns","blog","blog.zeruns.tech",9527,[0,1,2,[1,2]]]#创建一个列表,一个列表里可以有多种数据类型,甚至可以嵌套列表来做二或三维列表 # 0 1 2 3 4 # -5 -4 -3 -2 -1 print(list[0]) print(list[2]) print(list[4][2]) print(list[4][3][0]) print(list[-1]) print(list[-2]) ''' 结果: zeruns blog.zeruns.tech 2 1 [0, 1, 2, [1, 2]] 9527 ''' ``` ### 列表的基本操作 | 列表操作符 | 操作符含义 | | :-: | :-: | | < list1 > + < list2 > | 连接两个列表 | | < list > * < 整数类型 > | 对列表进行整数次重复 | | < list >[< 整数类型 >] | 索引列表中的元素 | | len( < seq > ) | 获取列表中元素个数 | | for < var > in < list > : | 对列表进行循环列举 | | < list >[< 整数类型 > : < 整数类型 >] | 取列表的一个子序列 | | < expr > in < list > | 成员检查,判断< expr >是否在列表中 | |  | | ### 列表的相关方法 | 方法 | 方法含义 | | :-: | :-: | | < list >.append( x ) | 将元素x增加到列表的最后 | | < list >.sort( ) | 将列表元素排序,默认为升序 | | < list >.reverse( ) | 将列表元素反转 | | < list >.index( ) | 返回第一次出现元素x的索引值 | | < list >.insert( i, x ) | 在位置i处插入新元素x | | < list >.count( x ) | 返回元素x在列表中的数量 | | < list >.remove( x ) | 删除列表中第一次出现的元素x | | < list >.pop( i ) | 取出列表中位置i的元素,并删除它 | ```python >>> a = [2,0,9,1,5] >>> b = ['c','w','b','a'] >>> a.append(9) >>> a [2, 0, 9, 1, 5, 9] >>> a.sort() >>> a [0, 1, 2, 5, 9, 9] >>> a.reverse() >>> a [9, 9, 5, 2, 1, 0] >>> b.sort() >>> b ['a', 'b', 'c', 'w'] >>> a.index(5) 2 >>> a.insert(2,7) >>> a [9, 9, 7, 5, 2, 1, 0] >>> a.count(9) 2 >>> a.remove(9) >>> a [9, 7, 5, 2, 1, 0] >>> a.pop(0) 9 >>> a [7, 5, 2, 1, 0] ``` ### 列表推导式 - 列表推导式(又称列表解析式)提供了一种简明扼要的方法来创建列表。 - 它的结构是在一个中括号里包含一个表达式,然后是一个for语句,然后是 0 个或多个 for 或者 if 语句。那个表达式可以是任意的,意思是你可以在列表中放入任意类型的对象。返回结果将是一个新的列表,在这个以 if 和 for 语句为上下文的表达式运行完成之后产生。 - 列表推导式的执行顺序:各语句之间是嵌套关系,左边第二个语句是最外层,依次往右进一层,左边第一条语句是最后一层。 ```python data = [i for i in range(10)] #等价于 data = [] for i in range(10): data.append(i) '--------------分割线---------------' data = [2**i for i in range(10)] #等价于 data = [] for i in range(10): data.append(2**i) '--------------分割线---------------' data = [num for num in range(20) if num%2==1] #等价于 data = [] for num in range(20): if num%2==1: data.append(num) ``` ### 应用 > **一个学校,有3个办公室,现在有8位老师等待工位的分配,请编写程序,完成随机的分配** **答案:** ```python #encoding=utf-8 import random # 定义一个列表用来保存3个办公室 offices = [[],[],[]] # 定义一个列表用来存储8位老师的名字 names = ['A','B','C','D','E','F','G','H'] i = 0 for name in names: index = random.randint(0,2) offices[index].append(name) i = 1 for tempNames in offices: print('办公室%d的人数为:%d'%(i,len(tempNames))) i+=1 for name in tempNames: print("%s"%name,end='') print("\n") print("-"*20) ``` 运行结果如下:  ## 元组 ### 基本概念 - 元组(tuple)是**包含多个元素的类型**,元素之间用逗号分割 如:t1 =(123,456,"hello") - 可以通过把若干元素放在一对圆括号中创建元组,如果**只有一个元素的话则需要多加一个逗号**,例如(3,)。 - 也可以使用tuple()函数把列表、字典、集合、字符串以及range对象、map对象、zip对象或其他类似对象转换为元组。 - 元组可以是空的,t2=() - 一个元组也可以作为另一个元组的元素,此时,作为元素的元组需要增加括号,从而避免歧义,如:t3=(123,456,("hello","world")) - Python 的元组与列表类似,不同之处在于元组的元素不能修改。 ### 元组的使用 ```python >>> a = ('hello',2020,110) >>> a ('hello', 2020, 110) >>> a[1] 2020 ``` **元组中的元素值是不允许修改和删除的,但我们可以使用del语句来删除整个元组** ```python >>> a = ('hello',2020,'blog.zeruns.tech') >>> print(a) ('hello', 2020, 'blog.zeruns.tech') >>> del a >>> print(a) Traceback (most recent call last): File "<pyshell#24>", line 1, in <module> print(a) NameError: name 'a' is not defined ``` **所谓元组的不可变指的是元组所指向的内存中的内容不可变。** ```python >>> tup = ('r', 'u', 'n', 'o', 'o', 'b') >>> tup[0] = 'g' # 不支持修改元素 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'tuple' object does not support item assignment >>> id(tup) # 查看内存地址 4440687904 >>> tup = (1,2,3) >>> id(tup) 4441088800 # 内存地址不一样了 ``` ## 字典 ### 基本概念 - 字典是**无序**的对象集合,使用键-值(key-value) 存储,具有极快的查找速度。 - 键(key)必须使用不可变类型 - 同一个字典中,键(key)必须是**唯一**的 - 字典的每个键值key= >value对用冒号:分割,每个键值对之间用逗号,分割,整个字典包括在花括号}中,格式如下所示: - dic = {key1 : value1, key2 : value2 } - 字典键一般是唯的,如果重复最后的一一个键值对会替换前面的,值不需要唯一。 - 键必须不可变,所以可以用数字,字符串或元组充当,而用列表就不行 ```python >>> hhh = {'website':'blog.zeruns.tech','name':'zeruns'} >>> hhh['website'] 'blog.zeruns.tech' ``` ### 常用方法 | 方法 | 描述 | | :-: | :-: | | keys() | 返回字典中键的列表 | | values() | 返回字典中值的列表 | | items() | 返回tuples的列表。每个tuple由字典的键和相应值组成 | | clear() | 删除字典的所有条目 | | copy() | 返回字典高层结构的一个拷贝,但不复制嵌入结构,而只复制对那些结构的引用 | | update(x) | 用字典x中的键值对更新字典内容。 | | get(x[,y])) | 返回键x,若未找到该键返回none,若提供y,则未找回时返回y | | str(x) | 以字符串形式输出字典x | | len(x) | 返回字典x的元素个数,即键的总数。 | ```python >>> hhh = {'website':'blog.zeruns.tech','name':'zeruns'} >>> hhh.keys() dict_keys(['website', 'name']) >>> hhh.values() dict_values(['blog.zeruns.tech', 'zeruns']) >>> hhh.items() dict_items([('website', 'blog.zeruns.tech'), ('name', 'zeruns')]) >>> hhh.copy() {'website': 'blog.zeruns.tech', 'name': 'zeruns'} >>> awsl = {'website':'https://blog.zeruns.tech'} >>> hhh.update(awsl) >>> hhh {'website': 'https://blog.zeruns.tech', 'name': 'zeruns'} >>> hhh.get('website') 'https://blog.zeruns.tech' >>> hhh.get('hhh','666') '666' >>> hhh.clear() >>> hhh {} >>> dict = {'Name': 'zeruns', 'Age': 7, 'Class': 'First'} >>> str(dict) "{'Name': 'zeruns', 'Class': 'First', 'Age': 7}" ``` ### 字典元素修改、添加与删除 - 可以使用字典对象的pop()删除指定“键”对应的元素,同时返回对应的“值" - popitem()方法用于删除字典的一个键对,并返回一个包含两个元素的元组,其中的两个元素分别是字典元素的“键”和“值" . - 也可以使用del删除指定的“键”对应的元素。  ## 集合 ### 概述 - Python集合是**无序、可变**的容器对象,所有元素放在一对**大括号**中,元素之间使用逗号分隔,同一个集合内的每个**元素都是唯一**的, 不允许重复, - 集合中只能包含**数字、字符串、元组等**不可变类型的数据,而**不能包含列表.字典、集合等**可变类型的数据,包含列表等可变类型数据的元组也不能作为集合的元素。 - 集合中的元素是**无序**的,元素存储顺序和添加顺序并不一致。 - 集合不支持使用下标直接访问特定位置上的元素,也不支持使用 `random`中的 `choice()`函数从集合中随机选取元素,但支持使用 `random`模块中的 `sample()`函数随机选取部分元素。 ### set(集合) - set和dict类似, 也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。 - set是无序的,重复元素在set中自动被过滤。 - 可以使用大括号 `{ }`或者 `set()`函数创建集合,注意:创建一个空集合必须用 `set()`而不是 `{ }`,因为 `{ }`是用来创建一个空字典。 - set可以看成数学意义上的无序和无重复元素的集合,因此,两个set可以做数学意义上的交集(&)、井集(|)、差集(-)等操作。 ### 集合的常用方法 - s = add(x):将元素x添加到集合s中,如果元素已存在,则不进行任何操作。 - s = update(x):将x的元素添加到集合s中,x可以是列表,元组,字典等。 - s.pop(x):随机删除集合中的一个元素。 - s.remove(x):将元素x从集合s中移除,如果元素不存在,则会发生错误。 - s.discard(x):将元素x从集合s中移除,如果元素不存在,**不会发生错误**。 - len(s):计算集合 s 元素个数。 - s.clear():清空集合 s。  ## 字符串 ### 概述 - 字符串(str)是用双引号""或者单引号''括起来的一个或多个字符 - 字符串可以保存在变量中,也可以单独存在 - 字符串属于不可变对象,所有方法都是返回处理后的字符串或字节串,不对原字符串进行任何修改。 ### 字符串操作 - 字符串之间可以通过**+或***进行连接 - 加法操作(+)将两个字符串**连接**成为一个新的字符串 - 乘法操作(*)生成一个由其本身字符串**重复连接**而成的字符串 - x in s:如果x是s的子串,返回True,否则返回False - str[N:M]:切片, 返回子串 - len()函数能返回-一个字符串的长度 - str1="hello,world" - len(str1) - 大多数数据类型都可以通过 `str()`函数转换为字符串:如 `str(123)` - `type()`函数测试一个字符串的类型 ### 字符串操作 | 操作 | 含义 | | :-: | :-: | | + | 连接 | | * | 重复 | | < string >[ ] | 索引 | | < string >[ : ] | 剪切 | | len(< string >) | 长度 | | < string >.upper() | 字符串中字母大写 | | < string >.lower() | 字符串中字母小写 | | < string >.strip() | 去两边空格及指定字符 | | < string >.split() | 按指定字符分隔字符串为数组 | | < string >.join() | 连接两个字符串序列 | | < string >.find() | 搜索指定字符串 | | < string >.replace() | 字符串替换 | | for < var > in < string > | 字符串迭代 | ### 常用方法 - index(x)、rindex(x): 检测x是否包含在字符串中,返回相应的索引值,如果不存在。返回异常。 - count(x):返回x在string里面出现的次数。  - replace(str1,str2[,max]):把将字符串中的str1替换成str2,如果max指定,则替换不超过max次。  - maketrans():创建字符映射的转换表。 - translate(str):根据str给出的映射转换表转换string字符。  - ljust(width[,fllchar]): 返回一个原字符串左对齐,并使用fillchar填充至长度width的新字符串,fillchar默认为空格。rjust()、center()类似。  - split(str="",num=string.count(str)),其中num=string.count(str))以str为分隔符截取字符串,如果num有指定值,则仅截取num+1个子字符串。rsplit()类似,从右侧开始截取。 - join(seq): 以指定字符串作为分隔符,将seq中所有的元素(的字符串表示)合并为一个新的字符串。  - startswith(substr)、endswith(substr):检查字符串是否是以指定子字符串substr开头或结束,是则返回True。  - strip()、rstrip()、lstrip(): 截取字符串的指定字符。  ### 字符串格式化 #### python字符串格式化符号: | 符 号 | 描述 | | :-: | :-: | | %c | 格式化字符及其ASCII码 | | %s | 格式化字符串 | | %d | 格式化整数 | | %u | 格式化无符号整型 | | %o | 格式化无符号八进制数 | | %x | 格式化无符号十六进制数 | | %X | 格式化无符号十六进制数(大写) | | %f | 格式化浮点数字,可指定小数点后的精度 | | %e | 用科学计数法格式化浮点数 | | %E | 作用同%e,用科学计数法格式化浮点数 | | %g | 浮点型数据 会去掉多余的零 至多保留6位 | | %G | 浮点型数据 会去掉多余的零 至多保留6位 | | %p | 用十六进制数格式化变量的地址 | #### 格式化操作符辅助指令: | 符号 | 描述 | | :-: | :-: | | * | 定义宽度或者小数点精度 | | - | 用做左对齐 | | + | 在正数前面显示加号( + ) | | < sp > | 在正数前面显示空格 | | # | 在八进制数前面显示零('0'),在十六进制前面显示'0x'或者'0X'(取决于用的是'x'还是'X') | | 0 | 显示的数字前面填充'0'而不是默认的空格 | | % | '%%'输出一个单一的'%' | | (var) | 映射变量(字典参数) | | m.n. | m 是显示的最小总宽度,n 是小数点后的位数(如果可用的话) | ### 应用 > 编写程序,完成以下要求: > 统计字符串中,各个字符的个数 > 比如:"hello world" 字符串统计的结果为: h:1 e:1 l:3 o:2 d:1 r:1 w:1 答案:[https://gitee.com/zeruns/Python-programming-exercises/blob/master/%E5%9F%BA%E7%A1%80/%E7%BB%9F%E8%AE%A1%E5%AD%97%E7%AC%A6%E4%B8%B2%E4%B8%AD%E5%90%84%E5%AD%97%E7%AC%A6%E4%B8%AA%E6%95%B0.py](https://gitee.com/zeruns/Python-programming-exercises/blob/master/%E5%9F%BA%E7%A1%80/%E7%BB%9F%E8%AE%A1%E5%AD%97%E7%AC%A6%E4%B8%B2%E4%B8%AD%E5%90%84%E5%AD%97%E7%AC%A6%E4%B8%AA%E6%95%B0.py) 最后修改:2020 年 08 月 13 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果您觉得我的文章有帮助,请随意赞赏,赞赏有助于激发博主的热情,感谢!
2 条评论
闲在家中无事,着手学习,会常来!
加油好好学OωO