一、编码
Python从最初的支持ASCII编码到Unicode编码一直到现在的UTF-8编码。
编码区别
ASCII编码仅仅是考虑的英文和数字,编码长度一个字节。
Unicode编码综合考虑的多种语言方式,编码长度一般为俩字节,但是却造成一定的空间浪费。例如英文用ASCII编码需要一个字节,而用Unicode编码需要俩字节,所以就造就了一定空间的浪费。但是也在一定程度上解决了乱码问题,统一的编码方式。(在Unicode出现早期,汉字用gb2312编码)
UTF-8编码是对Unicode的进一步优化,采用动态分配存储空间,例如英文用一个字节编码,汉字用俩字节编码。UTF-8可以理解为包含了ASCII和Unicode的优点的编码方式。
二、格式化
在Python中,字符串格式化和C语言是一样的方式.
>>> 'Hello, %s' % 'world'
'Hello, world'
>>> 'Hi, %s, you have $%d.' % ('Michael', 1000000)
'Hi, Michael, you have $1000000.'
%运算符就是用来格式化数据用的,%s代表格式化字符串,%d代表是格式化数字。有几个%?,后边对应几个字符串就行了。记得多个字符串格式化,后边字符串要顺序上对应上同时用括号包裹。如果仅仅只有一个字符串括号可以省略。
常见占位符如下:
%d 整数 %f 浮点数 %s 字符串 %x 十六进制整数
格式化整数和浮点数还可以指定是否补充0或者是小数点后边保留几位。
>>> '%2d-%02d' % (3, 1)
' 3-01'
>>> '%.2f' % 3.1415926
'3.14'
如果有时候你不知道格式化的数据的真实数据类型,那么%S可以转换任何数据为字符串类型。
>>> 'Age: %s. Gender: %s' % (25, True)
'Age: 25. Gender: True'
如何转译%为普通字符(正常字符串中这直接使用%作为字符串没任何问题,但是在需要有格式化的字符串中如果包含了一个%你需要怎么做?)
>>> 'growth rate: %d %%' % 7 'growth rate: 7 %'
三、集合
List
Python内置了一种数据类型列表:List,List是一种有序集合,可以完成添加和删除的功能。
>>> classmates = ['Michael', 'Bob', 'Tracy'] >>> classmates ['Michael', 'Bob', 'Tracy']
读取方式如下
>>> classmates[0] 'Michael' >>> classmates[1] 'Bob' >>> classmates[2] 'Tracy'
在Python中List的拥有反向读取数据的方式,例如-1读取则是从后向前数的第一个数据,也就是最后一个数据。
如果要取最后一个元素,除了计算索引位置外,还可以用-1
>>> classmates[-1] 'Tracy'
List的添加删除和插入及修改值。
>>> classmates.append('Adam') >>> classmates ['Michael', 'Bob', 'Tracy', 'Adam'] >>> classmates.pop() 'Adam' >>> classmates ['Michael', 'Jack', 'Bob', 'Tracy'] >>> classmates.pop(1) 'Jack' >>> classmates ['Michael', 'Bob', 'Tracy'] >>> classmates.insert(1, 'Jack') >>> classmates ['Michael', 'Jack', 'Bob', 'Tracy', 'Adam'] >>> classmates[1] = 'Sarah' >>> classmates ['Michael', 'Sarah', 'Tracy']
批注:
List中数据类型可以是任意类型,这个不同于Java中,在java中List要求在创建集合的时候声明这个集合存储的数据类型,一旦确认则只能存储这一种类型。
Python中List中存储List
>>> p = ['asp', 'php']
>>> s = ['python', 'java', p, 'scheme']
这里如果要获取对应的asp这个字符串,那么需要读取s[2][0],很显然整个List可以当做一个一维数组,二维数组,多维数组。
读取列表长度方式如下
>>> L = [] >>> len(L) 0
Tuple<元组>
有序列表元组Tuple,类似于List的数据存储。不同点在于一点定义初始化之后其内部数据对象是不允许修改,所以很显然Tuple不具备append和insert以及pop等操作。
声明和初始化对于List使用[],Tuple声明方式()。
>>> classmates = ('Michael', 'Bob', 'Tracy')
Tuple功能决定其使用之前需要确定内容数据,因为一旦创建之后数据无法修改。<不允许修改的是Tuple指向的对象>
可变的Tuple?????
>>> t = ('a', 'b', ['A', 'B']) >>> t[2][0] = 'X' >>> t[2][1] = 'Y' >>> t ('a', 'b', ['X', 'Y'])
不允许修改的仅仅是Tuple引用的对象,对于Tuple而言直接引用的是数组['A','B']对象,只要保证该数组对象不变<地址不变>,那么对于数组内部的东西他是不关注的,所以可以直接修改器数组内部数据,但是对于'a','b'而言是不允许被修改的。
dict<字典缩写,其实就是key-value,对于key的实现通过hash算法>
可以理解为字典<其实做过java的可以当做是map来理解它>,声明方式{key-value},不同在于内部值是以key-value的形式
>>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85} >>> d['Michael'] 95
对于dict的添加,删除,遍历
>>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85} >>> d['Michael'] 95 #添加 >>> d['ArMn'] = '25' >>> d['ArMn'] 25 #删除 >>>d.pop('ArMn') >>>d {'Michael': 95, 'Bob': 75, 'Tracy': 85} #遍历print前边需要加空格 否则会报错, IndentationError: expected an indented block >>> D = {'x':1, 'y':2, 'z':3} >>> for key in D: print key, '=>', D[key]
批注
dict中的顺序和放入的先后顺序无关。
List和dict比较:
List存储占用空间少,但是随着数据的增加查询速度回越来越慢。
dict存储占用空间大,但是随着数据的增加查询速度依然很快。
set<集合>
集合中的元素不允许重复<等同于java中的HashSet>,set可以看做是dict中的key的集合体,不允许有重复,并且不可变<不能是一个变量,而应该是一个固定值>,声明方式和元组的方式一样,使用括号()。
>>> s = set([1, 2, 3]) >>> s {1, 2, 3}
上述代表在set中声明一个list对象,当然也可以添加其他的数据类型例如字符串
>>> st = set('a') >>> st {'a'} >>> st = set(['a','b']) >>> st {'a', 'b'}
添加数据给set,从真实的执行效果来看,其实内部是解析变量list然后add给set。
对于元组而言也是一样,看如下执行结果
>>> tupleSet = set(('a','b')) >>> tupleSet {'a', 'b'}
集合转换
set转换为tuple,如下
>>> tup = (1,2,3,4) >>> tupSet = set(tup) >>> tupSet {1, 2, 3, 4} >>> tupCopy = tuple(tupSet) >>> tupCopy (1, 2, 3, 4) >>>
set转换list,如下
>>> slist = ['a','b','c'] >>> sSet = set(slist) >>> sSet {'c', 'a', 'b'} >>> slistCopy = list(sSet) >>> slistCopy ['c', 'a', 'b']
看到类似如上间转化再回头看下set的初始化传入参数有List和Tuple是不是有点别的想法<List到set,Tuple到set转换!!!>