Python核心编程---读书笔记:第6章 序列:字符串、列表和元祖

第6章序列:字符串、列表和元组

序列:多个元素可通过切片得到

成员关系操作符: in not in

连接操作符: + ,用extend()进行两个列表连接

重复操作符: * ,sequence ( copies_int

返回包含原对象拷贝的对象

切片操作符: [],[:] , [: :]

 

6.1.3内建函数

转换实际上是执行工厂函数

Unicode(obj):将对象转换成unicode(默认编码)

把列表对象传递给list():会创建对象的浅拷贝

 

浅拷贝:只拷贝对象的索引,不建立对象

Operational:

min(iter , key=None) or

min(arg0 , arg1, …key = None)

sorted(iter , func=None , key=None,reverse=False)

sum(seq , init=0):返回seq和init的综合

zip([it0 , it1, ... , itN]): 返回一个列表,其元素是it0,it1,…这些元素的第一个

元素组成的一个元组,第二个,…类推

 

6.2字符串

单引号字符串不解析,双引号解析转移字符

字符串是不可变类型

删除字符串:赋值为空串,或del语句来删除

del string

string = ‘’

 

6.3 字符串和操作符

切片:[start ,end],end取不到

反向索引:从-1开始,最后一个索引为-len

in,not in:用于判断一个字符串是否出现在另一个字符串中

 

不推荐用字符串加法,建议使用字符串格式化打印,或者用join

unicode字符串与普通字符串做连接会将普通字符串转化为Unicode字符串

 

重复操作符(*)

 

# *是重复操作符
def repeat_test():
    string = 'a'
   
string3 = string * 3
   
print(string3)

 

6.4只适用于字符串的操作符

格式化操作符%

%c :转换成字符

%r: 优先用repr()函数进行字符串转换

%u :无符号十进制数

%o: 无符号八进制数

%e: 科学计数法

m.n : m最小总宽度,n小数点后位数

-:左对齐

 

新式字符串Template对象,

 

from string import Template

# 字符串模板使用${}来明确要替换的变量,然后将模板中的substitue进行字符串替换
def stringTemplate():
    string = Template('${name} is ${age}!')
    result = string.substitute(name='DongFei', age=30)
    print(result)

 

 

6.4.3原始字符串操作符(r/R)

原始字符串目的:所有字符按照其字面意义

r’string’

例如: r’\n’表示反斜杠加上n,而不是转义后的换行符

def rawString_test():
    string= r'\n'
   
print(string)

 

6.4.4Unicode字符串操作符(u/U)

unicode用于将标砖字符串转换成完全地Unicode字符串对象

u‘abc’

 

内建函数:

max():返回序列或字符串中最大的字符

min():                    小

 

6.5.3自复查un类型函数

str():工厂函数,产生对对应类型的对象

Unicode():

chr():返回整数对应的字符

unichr():返回的是unicode字符 chr(65) = ‘A’

ord():返回字符对应的整数,chr(‘a’) =97

 

6.6字符串内建函数

string.count(str , beg=0,end=len(string)):返回str在string中出现次数

string.decode(encoding=’UTF-8’ , errors=’strict’):以指定编码格式转换string

string.find(str , beg=0,end=len(string)):检测str是否在string中,找不到返回-1

string.join(seq):以string作为分隔符,将seq所有元素拼接

string.replace(str1 , str2 ,num=string.count(str1)):替换次数不超过num次

string.rfind(str , beg = 0 ,end=len(string)):类似于find()函数,从右边查找

string,split(str=”” ,num=string.count(str)):以str作为分隔符切片,仅分隔num个字符串

 

三引号

允许字符串跨行

def threeQuote_test():
    hi = '''abc
    def
    hij'''
   
print(hi)

 

6.7.2字符串不变性

字符串的值不能改变

ASCII:标准信息交换码

BOM:字节顺序标记

UTF:Unicode的转换格式Unicodetransform format

UTF-8:八位UTF转换格式,无符号字节序列,长度为1到四个字节

 

Ascii:找到每个字节对应数值转换为字符显示,8个字符

Unicode:使用1或多个字节来表示字符

默认字符串编码用ASCII,在字符串前面加’u’

表示Unicode自复查un

str(),chr()处理ASCII字符串,即0~255范围

Unicode(),unichr()将类型转换为unicode自复查un

 

codecs

coder/decoder组合,定义文本跟二进制值的转换方式

编码解释:encode()来把unicode内容转换为指定编码格式内容

unicode字符串到磁盘需要用指定编码器编码

 

教训:数据库应用要考虑支持Unicode

 

6.9相关模块

string:字符串

re:正则表达式

struct:字符串二进制转换

c/StringIO:字符串IO对象

base64: Base编码

codecs:解码器注册

crypt:单方面加密

difflib:找出序列间的不同

hashlib:安全哈希算法

md5:RSA的MD5信息摘要鉴权

 

6.10字符串关键点总结

原始字符串不转义

三引号可以换行

 

 

6.11列表

删除元素:

删除指定下标元素用del : del nums[1]

remove用于删除某个值,且只能删除一个:nums.remove(123)

删除列表用del, del nums

 

列表比较是用cmp。对两个列表对应位置元素逐个比较

 

序列类型操作符

切片(  [] 和[:] )

连接操作符(+) :可以把多个列表对象合并在一起

 

 

重复操作符(*)

对列表内容复制

nums * 3,表示会对nums内容复制3份

 

# 重复操作符(*) 会复制列表内容,nums * 3,会把nums内容复制3份
def listCopy_test():
    nums = [1,2]
    newNums = nums * 3
   
print(newNums)

 

 

列表解析:采用[]和for进行解析

[i * 2 for i in nums]

 

6.13内建函数

6.13.1 标准类型函数

cmp():比较中如果两个元素不是同一类型,检查是否是数字

max():返回列表中最大元素,只适用于数字和字符串列表
min():

sorted(nums):

reversed(nums):逆置列表

enumerate():

sum():列表求和

def min_max_sum_Test():
    nums = range(1,11,1)
    maxNum = max(nums)
    minNum = min(nums)
    sumResult = sum(nums)
    print("maxNum : %d , minNum: %d , sumResult:%d" % (maxNum , minNum ,sumResult))

 

list()和tuple()可以接受可迭代对象作为参数,通过浅拷贝

数据来创建一个新的列表或者元组

range():接受数值作为输入,返回列表

list.index(obj):返回值为list[k]=obj的k,如果不在0到len(nums)中,返回错误

list.sort(func=None,key=None,reverse=False)

reverse标志如果被设置为True。则反序排列

list.sort()原地操作,无返回值,可变对象可以直接修改

而字符串是不可变对象,不能改变值,因此会返回新的值

 

6.16元组

元组不可变类型,可用作字典的key

删除元组: del aTuple

 

6.17 元组操作符和内建函数

+

*

[:]

str(aTuple)

max()

min()

list()

==

 

元组作用:常量集合传递

元组不可变,但元组包含的可变对象可变

 

6.18.3默认集合类型

(‘a’)表示字符串

(‘a’,):必须加逗号表示元组

 

字典的关键字:键必须可哈希对象,元组变量符合,列表变量不是

使用元组:防止数据被其他人篡改

collections:容器数据累in个

types:含Python支持的所有类型

 

 

6.20 拷贝Python对象 浅拷贝和深拷贝

对象赋值是对象的引用:创建对象并赋值给另一个变量,python拷贝了这个对象的引用

默认拷贝是浅拷贝,通过完全切片[:],工厂函数list(),dict(),使用copy()都是浅拷贝,

浅拷贝的内容是原来对象元素的引用

字符串是拷贝,列表是浅拷贝,引用复制

浅拷贝的问题:对当前拷贝对象内容的修改会影响到原来对象

 

创建新容器需要copy.deepcopy()函数

 

#浅拷贝,只是持有对象引用,修改拷贝对象会造成对原有对象修改,切片,list(),dict(),copy()都是浅拷贝
def shallowCopyTest():
    person = ['name' , ['money' , 100.00] ]
    husband = person[:]
    wife = list(person)
    husband[0] = 'dongfei'
   
wife[0] = 'xiangqing'
   
husband[1][1] = 50.0
   
wife[1][1] = 80.0
   
# 字符串是不可变,因此重新创建对象,两次的名字不同,但是列表是可变的,因此不会重新创建,采用引用方式,两者一致
   
print(husband)
    print(wife)


#深拷贝,完全创建新对象,修改拷贝对象不会对原对象产生影响
def deepcopy_Test():
    person = [ 'name' , ['money', 100.00 ] ]
    husband = person
    wife = copy.deepcopy(person)
    husband[0] = 'dongfei'
   
wife[0] = 'xiangqing'
   
husband[1][1] = 50.0
   
wife[1][1] = 80.0
   
# 字符串是不可变,因此重新创建对象,两次的名字不同,但是列表是可变的,因此不会重新创建,采用引用方式,两者一致
   
print(husband)
    print(wife)

 

浅拷贝:来完全切片来做,非容器类型:数字,字符串,没有被拷贝说法

元组不会被深拷贝,

copy():浅拷贝,deepcopy():深拷贝

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值