4 列表和元组
列表可以认为是Python里的数组,并且功能更丰富简便!
4.1 列表
4.1.1 创建列表
创建列表主要有两种方式. [ ] 表示一个空的列表。类型为:list
定义示例:
#定义一个列表a和一个列表b a = [] b = list() print(type(a)) print(type(b))
定义示例:可以直接用print打印列表
a = [1, 2, 3, 4] print(a)
列表可以存放不同类型的元素,如下代码:
a = ['a', 1, "hello"] print(a)
4.1.2 访问下标
可以通过下标访问操作符 [ ] 来读取或修改列表中的任意元素.
演示示例:
#定义列表a a = [1, 2, 3, 4] #取下标为1的元素 print(a[1]) #将下标为1的元素修改为0 a[1] = 0 print(a)
上述代码使用[],访问了下标为1的元素,并将其修改为0。
访问下标超出列表的范围会抛异常:
a = [1, 2, 3, 4] print(a[100])
访问下标支持负数访问:
a = [1, 2, 3, 4] #访问倒数第一个元素 print(a[-1])
4.1.3 切片操作
通过切片,一次取出一组连续的元素,相当于得到一个子列表。
使用 [ : ]的方式进行切片。
例如a[1:3]表示的是[1,3)的左闭右开区间的元素。并且支持省略前后边界。
代码演示:
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] #对部分元素切片 print(a[5:7]) #省略前半部分 print(a[:3]) #省略后半部分 print(a[6:]) #省略所有 print(a[:])
还可以指定第三个参数,‘步长’,并且‘步长可以为负数’:
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] #步长为2 print(a[0:5:2]) #步长为3 print(a[::3]) #步长为4 print(a[::4]) #步长为负数 print(a[::-2]) print(a[::-3])
切片越界也不会有负面效果,会输出可能包括的所有元素:
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] print(a[5:100]) print(a[200:300])
切片是个很高效的操作,进行切片的时候,只是取出了原有列表的一个部分,并不涉及到数据的‘拷贝’
4.1.4 遍历列表
使用for或while遍历列表
#最简便的遍历,依次取出各个元素的值,并打印 a = [1, 2, 3, 4] for elem in a: print(elem) #生成下标再访问 for i in range(0,len(a)) : print(a[i]) #按下标范围遍历,手动控制下标变化 i=0 while i<len(a): print(a[i]) i+=1
4.1.5 列表元素操作
append:向链表末尾插入一个元素(尾插)
insert:向任意位置插入一个元素。
in :查找元素是否在列表里,返回值是布尔类型。
not in :元素是否不在列表里面。
index():查找元素在列表中的下标。
pop :直接删除末尾元素(尾删)或者按下标来删除元素。
remove:按照值来删除元素。
操作演示:
a = ['zhangsan', 'lisi', 'wangwu'] print(f'原列表a={a}') #向链表末尾插入一个元素 a.append('zhaoliu') print(f'尾插后a={a}') #向第一个位置插入一个元素 a.insert(1,'heihei') print(f'第一个位置插入后a={a}') #查找元素是否在列表里 print('zhangsan' in a) print('zhangsan' not in a) #查找元素,如果在列表里返回下标,不在抛异常 print(f'查找下标为:{a.index("zhangsan")}') #尾删 a.pop() print(f'尾删后a={a}') #指定下标删除 a.pop(1) print(f'删除第一个位置后a={a}') #按照值来删除元素 a.remove('lisi') print(f'删除"lisi"后a={a}')
4.1.6 列表拼接操作
+ :把两个列表拼接起来,生成一个新列表(不改变原来的列表)。
extend :相当于把列表拼接到另一个列表的后面(直接在原来的列表上拼接)
# +不改变原来的列表,会生成新的列表 a =[1, 2, 3, 4] b= [5, 6] print(a+b) print(a) print(b) #extend会在原来的基础上扩大列表 a = [1, 2, 3, 4] b = [5, 6] a.extend(b) print(a)
4.2 元组
元组的功能和列表相比,基本一致(用[]来进行访问)。只不过元组不能修改里面的元素, 列表则可以修改里面的元素
元组定义:
atuple = ( )
atuple = tuple()
像读操作,比如访问下标, 切片, 遍历, in, index, + 等, 元组也是一样支持的.
但是, 像写操作, 比如修改元素, 新增元素, 删除元素, extend 等, 元组则不能支持.
4.3 字典
字典是一种存储键值对的结构。
把键(key)和值(value)进行一个一对一的映射, 然后就可以根据键, 快速找到值。
4.3.1 创建字典
创建一个空字典,使用{key:value}表示字典(dict)。
创建一个空字典:
a = {} b = dict() print(a) print(b)
创建的时候为元组指定初始值:
a = {'id': 12345, 'score': 100, 'name': 'xiaoming'} print(a) # 为了代码更美观,可以这样写 a = {'id': 12345, 'score': 100, 'name': 'xiaoming' }
键值对之间使用逗号分割, 键和值之间使用冒号(:)分割. (冒号后面推荐加一个空格).
4.3.2 查找key
使用 in 可以判定 key 是否在字 中存在。返回布尔值
a = {'id': 12345, 'score': 100, 'name': 'xiaoming' } print('id' in a) print('id' not in a)
使用方括号[],来访问元组的元素:
a = {'id': 12345, 'score': 100, 'name': 'xiaoming' } #用键访问字典中的值 print(a['id']) print('name')
如果要访问的key不在字典中,则会抛异常。
4.3.3 新增/修改元素
使用[ ] 可对字典中的数据修改,若字典中有该数据,则直接修改。若没有该数据,则在字典中新插入一个数据。
代码示例:
a = {'id': 12345, 'score': 100, 'name': 'xiaoming' } #元组中有该数据,直接修改 a['id'] =11111 print(a) #元组中无该数据,直接添加键值对 a['tele'] = 88888888 print(a)
4.3.4 删除元素
使用pop根据key删除对应键值对
a = {'id': 12345, 'score': 100, 'name': 'xiaoming' } print(a) #删除key ='id'的键值对 a.pop('id') print(a)
4.3.5 遍历字典元素
直接使用 for 循环能够获取到字典中的所有的 key, 进一步的就可以取出每个值了.
代码示例:
a = {'id': 12345, 'score': 100, 'name': 'xiaoming' } for key in a: print(key,a[key])
字典特有操作:
- 使用 keys 方法可以获取到字典中的所有的 key
- 使用 values 方法可以获取到字典中的所有 value
- 使用 items 方法可以获取到字典中所有的键值对.
代码示例:
a = {'id': 12345, 'score': 100, 'name': 'xiaoming' } print(a.keys()) print(a.values()) print(a.items())
4.3.6 合法的key(可哈希的key)
不是所有的类型都可以作为字典的 key.
字典本质上是一个哈希表, 哈希表的 key 要求是 “可哈希的”, 也就是可以计算出一个哈希值。
但凡能够计算出哈希的值的元素,都可以作为字典的key:
print(hash(0)) print(hash(3.14)) print(hash('hello')) print(hash(True)) print(hash(())) # ( ) 是一个空的元组
列表和字典不可作为字典的key
5. 文件操作
5.1 打开文件
使用内建函数 open打开文件
f = open(‘d:/test.txt’, ‘r’)
1.第一个参数是一个字符串, 表示要打开的文件路径
2.第二个参数是一个字符串, 表示打开方式. 其中 r 表示按照读方式打开. w 表示按照写方式打开. a表示追加写方式打开.
如果打开文件成功, 返回一个文件对象f. 后续的读写文件操作都是围绕这个文件对象展开.
如果打开文件失败(比如路径指定的文件不存在), 就会抛出异常.
#打开文件 f = open('E:/text.txt', 'r') f.close()
5.2 关闭文件
当我们不使用文件时,我们要讲文件关闭!
使用f.close关闭文件。
一个程序能打开文件的数量是有上限的:
flist = [] count = 0 while True: f = open('E:/text.txt', 'r') flist.append(f) count += 1 print(f'count = {count}')
可以看出,当文件打开到一定数量的时候,就会抛异常
5.3 写文件
文件打开之后就可以写文件了
使用f.write的方法写文件
# 以写的方式打开文件 f = open('E:/text.txt', 'w') f.write('hello\n') f.write('world !') f.close()
换行也可以写进去
追加写:
由于每次使用 w 方式打开文件,每次都会清空文件,因此我们追加数据时用 a 来打开文件
# 以写的方式打开文件 f = open('E:/text.txt', 'w') f.write('hello\n') f.write('world !') f.close() #以追加的方式打开文件,不清空数据 f = open('E:/text.txt', 'a') f.write('haha') f.close()
5.4 读文件
读文件需要使用 r 的方式打开文件
使用f.read()方法完成读文件,参数表示读几个字符。
读字符文档:
# 以读的方式打开文件 f = open('E:/text.txt', 'r') #读两个字符 a = f.read(2) print(a)
读中文文档:
因为中文的编码有好几种,比较常见的就是GBK或者UTF-8,为了防止编码错误,我们需要对open函数输入第三个关键字参数,指定一下打开格式:
# 以读的方式打开文件 f = open('E:/text.txt', 'r',encoding='utf8') #读十个字符 a = f.read(10) print(a) f.close
5.5 上下文管理器
防止我们忘记关闭文件,python提供了上下文管理器,来帮助我们自动关闭文件
- 使用 with 语句打开文件.
- 当 with 内部的代码块执行完毕后, 就会自动调用关闭方法
with open('d:/test.txt', 'r', encoding='utf8') as f: lines = f.readlines() print(lines)
以上是Python基础知识部分介绍,后续会继续补充,如有问题,恳请大佬指点💖