第3章 Python的数据结构、函数和文件

第3章 Python的数据结构、函数和文件,第1张

3.1 数据结构和序列

元组
元组是⼀个固定⻓度,不可改变的Python序列对象。


创建元组的最简单⽅式,是⽤逗号分隔⼀列值:如下运行结果(1, 2, 3) (1, 2, (3, 4), 5)

tup = 1,2,3
tup
tup1 = 1,2,(3,4),5
tup1

当⽤复杂的表达式定义元组,最好将值放到圆括号内,如上第二个所示.

⽤tuple可以将任意序列或迭代器转换成元组,运行结果:(4,0,2)

tuple([4,0,2])

元组中存储的对象可能是可变对象。


⼀旦创建了元组,元组中的对象就不能修改了:以下报错

tup = tuple(['foo',	[1,	2],	True])
tup[2]= False

如果元组中的某个对象是可变的,⽐如列表,可以在原位进⾏修改,运行结果:[1, 2, [3, 4, 5]]

tup=[1,2,[3,4]]
tup[2].append(5)
tup

可以⽤加号运算符将元组串联起来,运行结果:(4, 0, 2, 2, 3)

tuple([4,0,2])+(2,3)

元组乘以⼀个整数,像列表⼀样,会将⼏个元组的复制串联起来,运行结果:(1, 2, 3, 1, 2, 3)

tup = 1,2,3
tup*2

元组拆分:直接以赋值的方式进行

tuple⽅法:因为元组的⼤小和内容不能修改,它的实例⽅法都很轻量。


其中 ⼀个很有⽤的就是count(也适⽤于列表),它可以统计某个值出现的频率。


列表
与元组对⽐,列表的⻓度可变、内容可以被修改。


你可以⽤⽅括号定义,或⽤list函数。


list函数常⽤来在数据处理中实体化迭代器或⽣成器:)(iter())

串联和组合列表

和元组一样可以使用加号“+”,将两个列表串联起来,但是耗时比较久,性能不佳,一般使⽤extend追加元素。


x.extend(obj)

排序

sort做排序:对列表做排序,list_a.sort(key=len),使用列表元素的长度来排序

sorted函数?

二分搜索和维护已排序的列表

bisect模块是一个python的针对一个有序数组的插入和排序 *** 作的一个模块。


但不检查数组是否排好序,position=bisect.bisect(x,r),返回x列表中r排序的位置(默认在右)。


切片

⽤切边可以选取⼤多数序列类型的⼀部分,语法是obj[start_index:end_index:step],start_index、end_index是obj的下标,step是步调,默认是1,取值不包括end_index的值,一下输出[12, 14, 23].

list_l = [1, 23, 45, 12, 24, 14, 52, 3]
list_l.sort()
list_l[2:5:1]

一定要注意start_index,end_index,step的正负和大小,这块容易出错,从左往右取值,step必须为正,从右往左取值,step取值为负;

还要注意在连续切片时返回类型为list类型,而取单个元素时是其本身类型。


注意注意

序列函数

python中有一部分有序列的函数:

  1. enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中,返回该列表及对应下标:
li = [1, 3, 12, 14, 23, 23, 42, 45]
for i, value in enumerate(li):
    print(i, value)
  1. sorted函数:sorted函数可以从任意序列的元素返回⼀个新的排好序的列表,sorted(iterable, cmp=None, key=None, reverse=False)。


  2. zip函数:压缩和解压,压缩:zip可以将多个列表、元组或其它序列成对组合成⼀个元组列表,zip([iterable, …]),还有解压,反向 *** 作,将行
  3. reversed函数:reversed 函数返回一个反转的迭代器。


    reversed(iterable)

字典

最重要的数据结构,字典别名是哈希映射或关联数组。


它是键值对的大小可变集合,键和值都是 Python对象。


  1. del关键字或pop⽅法:(返回值得同时删除键)删除值。


  2. update⽅法是原地改变字典。


  3. 字典创建:⽤序列创建字典:输出结果:{‘a’: 1, ‘b’: 3, ‘c’: 12}
tp1 =(1, 3, 12)
tp2 =("a","b","c")
mapping=dict(zip(tp2,tp1))
mapping

还有一种方法创建字典:字典推导式(Dict Comprehension),与列表推导式类似。


cities=['oxford','beijing','tokyo','london']
countries=['uk','china','japan','uk']
d = {city:country for city,country in zip(cities,countries) if country=='uk'}
d

{'oxford': 'uk', 'london': 'uk'}

默认值:dict的⽅法get()和pop()可以取默认值返回,语法是dict.get(key[, value]),字典里有key对应的值即取,无返回none或value,如下:

words=['apple','bat','bar','atom']
by_letter={}
for word in words:
    letter =word[0]
    by_letter.setdefault(letter,[]).append(word)
by_letter

{'a': ['apple', 'atom'], 'b': ['bat', 'bar']}

有效的键类型:字典的值可以是任意Python对象,⽽键通常是不可变的标量类型
(整数、浮点型、字符串)或元组(元组中的对象必须是不可变的)。


这被称为“可哈希性”。


可以⽤hash函数检测⼀个对象是否是可哈希的(可被⽤作字典的键)
集合:
集合是⽆序的不可重复的元素的集合。


你可以把它当做字典,但是只有键没有值。


可以⽤两种⽅式创建集合:通过set函数或使⽤尖括号set语句。


集合⽀持合并、交集、差分和对称差等数学集合运算。


python对集合的 *** 作:

列表、集合和字典推导式:列表推导式是Python最受喜爱的特性之⼀。


它允许⽤户⽅便的从⼀个集合过滤元素,形成列表,在传递参数的过程中还可以修改元素。


形式如下(与for循环等同):

list_comp = [expr for val in collection if condition]
dict_comp = {key-expr:value-expr for value in collection if condition}
set_comp = {expr for value in collection if	condition}
3.2函数

​匿名(lambda)函数?

柯里化:部分参数应用:partial它指的是通过“部分参数应⽤”从现有函数派⽣出新函数的技术,是定义了⼀个可以调用现有函数的新函数。


(输出:9)

import functools
def add_numbers(x,y):
    return x + y
#派生出的如下函数add_five,只有一个参数
add_five= lambda y:add_numbers(5,y)
#内置functools模块可以⽤partial函数简化上述过程
add_five=functools.partial(add_numbers,5)
x=add_five(4)
x

生成器:能以⼀种⼀致的⽅式对序列进⾏迭代(⽐如列表中的对象或⽂件中的⾏)是Python的⼀个重要特点。


这是通过⼀种叫做迭代器协议(iterator protocol,它是⼀种使对象可迭代的通⽤⽅式)的⽅式实现的,⼀个原⽣的使对象可迭代的⽅法。


常和for一块用。


⽣成器表达式如上列表集合字典的推导式。


要创建⼀个⽣成器,只需将函数中的return替换为yeild即可。



itertools模块
错误和异常处理:优雅地处理Python的错误和异常是构建健壮程序的重要部分,这块要充实下

  • [ ]这块充实下
3.3 文件和 *** 作系统

先插入对文件读写的 *** 作模式

常用的文件方法

文件的字节和Unicode:Python⽂件的默认 *** 作是“⽂本模式”,尽量使用with方法来 *** 作文件,不用open。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/langs/570344.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-09
下一篇 2022-04-09

发表评论

登录后才能评论

评论列表(0条)

保存