python数据结构之列表、字典、元组、集合

发布时间:2020-07-07 22:19:54 作者:cxf210210
来源:网络 阅读:1081

列表

列表在python里是有序集合对象类型。
列表里的对象可以是任何对象:数字,字符串,列表或者字典,元组。与字符串不同,列表是可变对象,支持原处修改的操作
python的列表是:

列表的操作

列表的操作和字符串大部分都相同:
合并/重复:

基本列表操作

创建一个列表:

>>> list=[]
>>> list=[1,2,'3',[]]
>>> list
[1, 2, '3', []]

列表取值:

>>> list[1]
2
>>> list[0:3]
[1, 2, '3']

重复列表内容:

>>> list*3
[1, 2, '3', [], 1, 2, '3', [], 1, 2, '3', []]

使用in方法来判断对象是否在列表中:

>>> 3 in list
False
>>> [] in list
True

循环打印:

>>> for i in list:
...     print (i,end=' ')
...
1 2 3 [] 

迭代方式创建列表:

>>> list=[i*4 for i in 'ASDF' ]
>>> list
['AAAA', 'SSSS', 'DDDD', 'FFFF']

矩阵:

list=[ [1,2,3,],[4,5,6],[7,8,9] ]
>>> list
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> list[0][1]
2
>>> list[1][2]
6

列表原处修改:

>>> food=['spam','eggs','milk']
>>> food[1]
'eggs'
>>> food[1]='Eggs'
>>> food[:]
['spam', 'Eggs', 'milk']
列表的方法
>>>food.append('cake')  
>>> food
['spam', 'Eggs', 'milk', 'cake']
>>> food.sort()    
>>> food
['Eggs', 'cake', 'milk', 'spam']
>>> list=['abc','aDd','ace']
>>> sorted(list)
['aDd', 'abc', 'ace']
>>> list
['abc', 'aDd', 'ace']
>>> sorted(list,key=str.lower,reverse=True)
['aDd', 'ace', 'abc']
>>> sorted(list,key=str.lower)
['abc', 'ace', 'aDd']
>>>sorted([x.lower() for x in list])
['abc', 'ace', 'add']
>>> sorted([x.lower() for x in list],reverse=True)
['add', 'ace', 'abc']
列表的实际用法

字典用法注意事项:

字典的基本操作:

元组

元组简介

元组与列表非常类似,只是不能在原处更改,元祖在python里的特点:

元组的创建

元祖创建在只有单个元素的时候,必须加逗号(,),元组里可以嵌套元组

>>> tuple=()
>>> tuple=(1,)
>>> type(tuple)
<class 'tuple'>
#这里加不加括号都一样
>>> tuple=(1,2,'3',(4,5))
>>> tuple
(1, 2, '3', (4, 5))
>>> tuple=1,2,'3',(4,5)
>>> tuple
(1, 2, '3', (4, 5))
将列表转换为元组
>>> list=[1,2,3,4]
>>> sd=tuple(list)
>>> sd
(1, 2, 3, 4)
元组的方法
集合特点
集合的创建
>>> s=set('a')
>>> a=set({'k1':1,'k2':2})
>>> b=(['y','e','d','o'])
>>> c={'a','b','c'}
>>> d={('a','b','c')}
集合基本操作

python文件

文件简介

文件对象在python里可以作为操作系统上的文件的链接
文件对象的使用方式与之前的字符串、列表等对象不同,它是对文件的输入、输出进行控制
在python里会用open函数来进行文件的控制

文件的访问

在python里使用open函数可以访问文件。
基本格式是:open(<file_address>[,access_mode])
这里的文件地址是文本形式,在Windows里由于文件地址是使用反斜杠(),所以,可以使用r来对反斜杠不进行转义。
例如:
open(r'C:\mydir\myfile')
访问模式里是参数,默认是r(读取)
在访问模式,每一种方法都有一种使用到b的方式,就是二进制模式。
文件的读写参数

操作说明符 解释
r 以只读方式打开文件,这是默认模式
rb 以二进制格式打开一个文件用于只读。这是默认模式
r+ 打开一个文件用于读写
rb+ 以二进制格式打开一个文件用于读写
w 打开一个文件只用于写入。文件存在则覆盖,不存在,则创建新文件
wb 以二进制格式打开一个文件只用于写入。文件存在则覆盖,不存在则创建
w+ 打开一个文件用于读写。如果文件已存在则将其覆盖,不存在则创建新文件。
wb+ 以二进制打开一个文件用于读写。如果该文件存在则覆盖,不存在则创建
a 打开一个文件用于追加,如果文件内容存在,则将新内容追加到文件末尾,不存在则创建新文件写入
ab 以二进制格式打开一个文件用于写入
a+ 打开一个文件用于读写,如果该文件存在,则会将新的内容追加到文件末尾,如果文件不存在,则创建新文件用于读写。
ab+ 以二进制格式打开一个文件用于追加,文件存在将追加,不存在则创建新文件用于读写
文件的使用

例子

>>> file1=open(r'D:\ruanjian\1.txt','w')
>>> file1.write('hello,world')
11
>>> file1.close()
>>> file1=open(r'D:\ruanjian\1.txt')
>>> file1.read()
'hello,world'
#tell用于获取文件指针位置,文件读取之后,文件指针在最后面
>>> file1.tell()
11
>>> file1.close()
>>>> file1=open(r'D:\ruanjian\1.txt')
>>> file1.seek(6)
6
>>> file1.read(5)
'world'
文件的读取

当我们要读取前五个字符的时候可以这样:

>>> file1=open(r'D:\ruanjian\1.txt')
>>> file1.read(5)
'hello'
>>> file1.tell()
5

当我们要按行读取的时候,可以使用readline和readlines方法

>>> file1=open(r'D:\ruanjian\1.txt')
>>> file1.readline()
'hello,world\n'
>>> file1.readline()
'wanger\n'
>>> file1.readline()
'asdfgghh'
>>> file1.readline()
''
>>> file1=open(r'D:\ruanjian\1.txt')
>>> file1.readlines()
['hello,world\n', 'wanger\n', 'asdfgghh']
文件的写入

当我们需要写入到一个文件的时候,会使用w模式。当相应的文件存在时,会覆盖原先的文件然后写入,当相应的文件不存在时会创建新文件。

模式 打开已有文件 打开新的文件 打开时指针位置 写入时指针位置
r+ 保留内容 发生错误 文件开头 当前位置
w+ 删除内容 创建文件 文件开头 当前位置
a+ 保留内容 创建文件 文件尾端 文件尾端
文件的访问
文件与其他类型

如果要将存储的字符串转换回原来的数据类型,可以用pickle模块:

>>> file=open(r'D:\ruanjian\1.txt','wb')
>>> a={'a':97}
>>> pickle.dump(a,file)
>>> file.close()
>>> file=open(r'D:\ruanjian\1.txt','rb')
>>> a_=pickle.load(file)
>>> a_
{'a': 97}
打印输出至文件

需要把打印的内容直接输出到文件里的时候:

>>> with open (r'D:\ruanjian\1.txt','w') as f:
...     print ('hello,world!',file=f)
...
>>> with open (r'D:\ruanjian\1.txt') as f:
...     f.read()
...
'hello,world!\n'
判断文件是否存在,不存在时写入

因为w方式对已存在的文件会清楚后写入,但有的时候我们不想覆盖原有的文件,我们可以使用如下方式:

>>> if not os.path.exists(r'D:\ruanjian\1.txt'):
...     with open(r'D:\ruanjian\1.txt','wt') as f:
...             f.write('hello,world')
... else:
...     print ('file already exists')
...
file already exists

在python3.x中我们也可以使用这种方式来判断文件是否存在,存在的话会报错,不存在的话文件可以创建

>>> with open(r'D:ruanjian\2.txt','xt') as f:
...     f.write('hello\n')
...
6
>>> with open(r'D:ruanjian\2.txt','xt') as f:
...     f.write('hello\n')
...
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
FileExistsError: [Errno 17] File exists: 'D:ruanjian\\2.txt'
读写压缩文件

文件在存储时也可以压缩存储,需要用到gzip或者bz2模块,在这两个模块中,默认是二进制模式,因此需要使用wt,rt等,指定text模式。读的时候使用rt,和read()。
压缩级别可以用compresslevel来设置,也可以使用open里的encoding,errors,newline等。

>>> with gzip.open(r'D:\ruanjian\1.gz','wt') as f:
...     f.write('text')
...
4
>>> with gzip.open(r'D:\ruanjian\1.gz','rt') as f:
...     f.read()
...
'text'
>>> with bz2.open(r'D:\ruanjian\1.bz2','wt') as f:
...     f.write('hello,world')
...
11
>>> with bz2.open(r'D:\ruanjian\1.bz2','rt') as f:
...     f.read()
...
'hello,world'
获取文件夹中的文件列表

这要用到os模块里的方法,关于os模块可以查看公众号的历史消息,对os模块有详细的解释,这里只列出一些简单的方法:

>>> import os
>>> os.getcwd()
'/root/blog'
>>> os.listdir('.')
['_config.yml', 'node_modules', '.gitignore', 'source', 'db.json', 'themes', 'package.json', 'public', 'scaffolds', '.deploy_git']
#当需要判断是文件时
>>> files=[file for file in os.listdir('.') if os.path.isfile(os.path.join('.',file))]
>>> files
['_config.yml', '.gitignore', 'db.json', 'package.json']

欢迎各位关注我的微信公众号
python数据结构之列表、字典、元组、集合

推荐阅读:
  1. python-列表list- 元组- 集合-字典(dict)-实例代码
  2. 5. Python数据类型之元组、集合、字典

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

python 数据结构 python数据结构

上一篇:服务器数据恢复方法之存储raid硬盘离线数据恢复案例

下一篇:76、交换机配置实验之VACL

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》