Dive in Python学习笔记三:内置数据类型

时间:2021-05-17 20:01:59
Dictionary介绍
Dictionary定义了键值之间一对一的关系。
定义Dictionary
>>>d = {"server":"mpilgrim","database":"master"}
取值
>>>d["server"] #输出mpilgrim
修改Dictionary
>>>d["database"]="pubs"
如果key已经存在则修改key对应的value值,否则添加一个key-value对
注意:dictionary的key大小写敏感
删除dictionary元素
>>>del d['database'] #删除key为database的键值对
清空dictionary(删除dictionary所有元素)
>>>d.clear()

List介绍
List是一个用方括号包括起来的有序元素的集合。List可以作为以0下标开始的数组。
List定义
>>>li = ['a','b','z','example']
取List元素
>>>li[-1] #输出'example'
说明:负数索引从list的尾部开始向前计数来存取元素。li[-n]=li[len(li) - n]。
列表切片list[start:end:step]
start可以省略,默认为0;end可以省略默认为list的长度;step可以省略,默认为1。
li[:n]总是返回前n个元素,而li[n:]总是返回剩下的元素。li[:]生成一个list拷贝。
添加元素
1. append向list的末尾追加单个元素
>>>li
['a','b','mpilgrim','z','example']
>>>li.append("new")
>>>li
['a','b','mpilgrim','z','example','new']
2. insert向list指定位置插入单个元素
>>>li
['a','b','mpilgrim','z','example']
>>>li.insert(2,"new")
>>>li
['a','b','new','mpilgrim','z','example']
3. extend连接list,将两个list为一个
>>>li
['a','b','mpilgrim','z','example']
>>>li.extend(["two","elements"])
>>>li
['a','b','mpilgrim','z','example','new','two','elements']

append和extend区别:
1. append接受一个参数,参数可以是任何类型,并简单地追加到list的尾部
>>>li = ['a','b','c']
>>>li.append(['d','e','f'])
>>>li
['a','b','c',['d','e','f']]

2. extend接受一个参数,参数必须是list类型,并且把该list中的每一个元素添加到原list中
>>>li = ['a','b','c']
>>>li.extend(['d','e','f'])
>>>li
['a','b','c','d','e','f']

list搜索
index在list中查找一个值的首次出现并返回索引值。如果没有找到,则会抛出异常。

测试list是否含有元素
item in list

Python布尔规则:
1. 0为false,其他所有数值皆为true
2. 空串("")为false;其他所有字符串皆为true
3. 空list([])为false;其他所有list皆为true
4. 空tuple(())为false;其他所有tuple皆为true
5. 空dictionary({})为false;其他所有dictionary皆为true

list元素删除
1. remove从list中删除一个值的首次出现,如果有多个值,则只删除第一个元素。
2. pop删除list的最后一个元素,然后返回删除元素的值。

list运算符
1. + 连接list
list = list + otherlist相当于list.extend(otherlist)。但+运算符把一个新的list作为值返回,而extend只修改存在的list。

2. +=
li += ['two']等同于li.extend(['two'])

3. * 重复器
li = [1,2] * 3等同于 li=[1,2]+[1,2]+[1,2],即将三个list连接成一个

Tuple介绍
Tuple是不可变的list。Tuple是用小括号包围的元素列表。
负数索引与list一样从tuple的尾部开始计数。
与list一样分片(slice)也可以使用。

Tuple与List的转换
1. Tuple转换为List
>>> li = list((1,2))
[1,2]
2. List转换为Tuple
>>> tu = tuple([1,2])
(1,2)
从效果上看,tuple冻结一个list,而list解冻一个tuple。

变量定义
Python也有局部变量和全局变量之分,但没有明显的变量声明。变量通过首次赋值产生,当超出作用范围时自动消亡。
注:当一条命令用续行符("\")分割成多行时,后续的行可以以任何方式缩进,无需遵守Python的严格缩进规则。

变量引用
引用未赋值的变量为报错:NameError: There is no variable named 'x'

一次赋多值
>>> v = ('a', 'b', 'e')
>>> (x, y, z) = v
>>> x
'a'
>>> y
'b'
>>> z
'e'
说明:(x,y,z) = v 分别将v中'a','b','c'赋值给变量x,y,z

连续值赋值
通过range函数生成连续值列表,然后一次性赋值给多个变量。
>>>range(7)
[0,2,3,4,5,6,7]

>>> (MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY) = range(7)
>>> MONDAY
0
>>> TUESDAY
1
>>> SUNDAY
6

说明:内置的range函数返回一个元素为整数的list。这个函数的简化调用形式是接收一个上限值,然后返回一个初始值从 0 开始的 list,它依次递增,直到但不包含上限值。还可以传入其它的参数来指定一个非 0 的初始值和非 1 的步长。

格式化字符串
Python 支持格式化字符串的输出。Python中,字符串格式化使用与 C 中 sprintf 函数一样的语法。
>>> k = "uid"
>>> v = "sa"
>>> "%s=%s" % (k, v)
'uid=sa'
说明:整个表达式的值为一个字符串。第一个 %s 被变量 k 的值替换;第二个 %s 被 v 的值替换。 (k, v) 是一个 tuple。

映射list
Python 的强大特性之一是其对 list 的解析,它提供一种紧凑的方法,可以通过对 list 中的每个元素应用一个函数,从而将一个 list 映射为另一个 list。
>>> li
[1, 9, 8, 4]
>>> li = [elem*2 for elem in li]
>>> li
[2, 18, 16, 8]
注意:对list的解析并不改变原始的list

连接list为单个字符串
使用字符串对象的join方法连接list的各个元素。
>>> params = {"server":"mpilgrim", "database":"master", "uid":"sa", "pwd":"secret"}
>>> ";".join(["%s=%s" % (k, v) for k, v in params.items()])
'server=mpilgrim;uid=sa;database=master;pwd=secret'
说明:
1. 这里的 join 方法将 list 中的元素连接成单个字符串,每个元素用一个分号隔开。分隔符不必是一个分号;它甚至不必是单个字符。它可以是任何字符串。
2. join 只能用于元素是字符串的 list;它不进行任何的强制类型转换。对于其他类型需要强制转换为字符串。
>>> v = [1,2]
>>> ";".join(v)
Traceback (most recent call last):
File "", line 1, in
";".join(v)
TypeError: sequence item 0: expected str instance, int found
>>> ";".join([str(item) for item in v])
'1;2'

分割字符串
字符串的split方法,将字符串按指定分割符分割成list。
>>>s
'server=mpilgrim;uid=sa;database=master;pwd=secret'
>>> s.split(";")
['server=mpilgrim', 'uid=sa', 'database=master', 'pwd=secret']
>>> s.split(";", 1)
['server=mpilgrim', 'uid=sa;database=master;pwd=secret']
说明:split 接受一个可选的第二个参数,它是要分割的次数。