一、列表,元组,字典以及集合的对比图表
列表,元组,字典以及集合的对比图表 | ||||
| 列表 list | 元组 tuple | 字典 dict | 集合 set |
可否修改 | 可变 | 不可变 | 可变 | 可变 |
可否重复 | 可以 | 可以 | 可以 | 不可以 |
是否有序 | 有序 | 有序 | 无序 | 无序 |
存储方式 | 元素值 | 元素值 | 键值对 | 键值对 |
python内建函数:
- len函数:返回序列中所包含元素的数量。
- max函数:返回序列中最大的元素。
- min函数:返回序列中最小的元素。
python中列表和元组两种数据结构属于有序(这里有序并不是指按照一定逻辑排序,而是指存储按照下标索引可以找到)的序列,而其中元组是不可修改的,下面分别介绍四种数据结构的概念和它们之间的相互转换
二、列表 list '[]'
初始化:a = [1,2,'str']
除了可以通过索引直接访问元素,在python中可以使用分片(前包后不包)操作来访问一定范围内的元素
#coding:utf-8
a = [0,1,2,3,4,5,6,7,8,9]
print a[3:6] #按索引分片
print a[-3:-1]#从后面数,从-1开始
print a[-3]
print a[-3:0]#只要左边索引的元素值比右边索引的元素值出现晚,结果就为空
print a[-3:]
print a[:3]
print a[:]#相当于复制原序列
print a[1:8:2]#第三位索引为步长
print a[8:1:2]#只要左边索引的元素值比右边索引的元素值出现晚,结果就为空
print a[1:8:-2]#只要左边索引的元素值比右边索引的元素值出现晚,结果就为空—这里由于步长为负,是从后往前索引,1比8出现晚
print a[8:1:-2]
[3, 4, 5]
[7, 8]
7
[]
[7, 8, 9]
[0, 1, 2]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 3, 5, 7]
[]
[]
[8, 6, 4, 2]
除了可以通过索引下标和分片两种方式直接对列表元素操作之外,列表常用函数如下:
- list() 函数:把元组,字符串等转换为列
由于字符串和元组等不可修改,有时候这函数很有用;eg:list('hello') 输出: ['h','e','l','l','o']。
如果要把列表转换为字符串,常用join函数。' '.join(somelist) 以空格连接列表元素 - append() 函数:在列表末尾追加新对象,eg:list.append(x),没有返回值 print list
- count() 函数:统计某个元素在列表中出现的次数,eg:list.count(x) ,返回出现次数 print list.count(x)
- extend() 函数:可以用写列表扩展原来的列表,eg:a.extend(b),没有返回值 print a
- index() 函数:找到元素下标,eg:list.index(x),返回下标 print list.index(x) ,如果没找到,会返回异常
- insert() 函数:将对象插入到列表,eg:list.insert(3,'four') 没有返回值,print list
- pop() 函数:移除列表元素,默认最后一个,pop(i)移除列表下标为i的列表值,list.pop() 返回被移除的值 print list.pop()
- remove() 函数:移除列表中第一个匹配项,list.remove('be'),没有返回值,print list
- reverse() 函数:将列表中元素反响存放,list.reverse() ,没有返回值,print list
三、元组 tuple '()'
初始化 a = (1,2,'str')
元组的意义
既然有了列表,元组又不可变,那么元组存在的意义是什么?
- 元组可以在映射(和集合的成员)中当做键值对使用——而列表则不行
- 元组作为很多内建函数和方法的返回值存在,也就是说必须对元组进行处理
元组定义的tips
- 定义tuple时,必须确定元素值不可更改
- 如果tuple只有一个元素,需要加逗号 a = (1,),如果定义为b = (1) 就会产生歧义
四、字典 dict '{}'
字典是一种通过名字来引用值的数据结构—映射(mapping)。
字典是无序的,通过键值对存储元素,通过键来访问成员,成员可以重复
字典常用函数如下:
- len()函数:返回字典x中键值对的数量,len(x)
- clear()函数:清除字典中所有的项,类似于list.sort(),没有返回值
- copy()函数:这里是指浅复制,返回具有相同键值对的新字典 eg:y = x.copy()
- fromkeys()函数:使用给定的键,建立新的字典,值为None,返回新的字典。eg:{}.fromkeys(['name','age'])
- get()函数:访问字典,一般用d[]访问,如果字典不存在,会报错,用d.get('name'),会返回None
- keys()函数:获得键的列表,d.keys(),将键以列表形式返回
- values()函数:获得值的列表,同上
- pop()函数:删除键值对,d.pop(k),没有返回值
- update()函数:更新成员,若成员不存在,相当于加入,没有返回值
- items()函数:获得由键值对组成的列表,返回列表,d.items()
#coding:utf-8
d = {1:'a',2:'b',3:'c',4:'d'}
print len(d)
c = d.copy()
print c
print {}.fromkeys(['str'])
print d.get(1)
print d.get(888)
print d.keys()
print d.values()
d.pop(1)
print d
print d.items()
4
{1: 'a', 2: 'b', 3: 'c', 4: 'd'}
{'str': None}
a
None
[1, 2, 3, 4]
['a', 'b', 'c', 'd']
{2: 'b', 3: 'c', 4: 'd'}
[(2, 'b'), (3, 'c'), (4, 'd')]
五、集合 set '{}'
集合是一个无序不重复元素集,python中的集合与其它
定义集合:set0 = {1,2,3,4}
集合常用函数如下:
- add()函数:添加新元素,没有返回值,如果添加重复元素,不会报错,不添加而已
- pop()函数:set集合无序,这里会随机删除一个元素,返回值为删除的元素
六、四种数据结构相互转换
#coding:utf-8
list1 = [1,2,2,3,4]
list2 = ['c1','c2','c3','c4','s','c']
list3 = [[1,'a'],[2,'b']]
set0 = set(list1)
d0 = dict(zip(list1,list2))
d1 = dict(list3)
str = ' '.join(list2).strip() #strip函数是去除首尾的空格
print set0 #转换为集合
print d0 #转换为字典,list1有重复元素,形成字典看结果
print d1 #转换为字典
print str #转换为字符串
print list(d0) #字典转换为列表,这里转换的值为键元素
print tuple(d0) #字典转换为元组,这里转换的值为键元素
print list(set0)#相当于list=list(set(list1)),把list1做了去重的处理
set([1, 2, 3, 4])
{1: 'c1', 2: 'c3', 3: 'c4', 4: 's'}
{1: 'a', 2: 'b'}
c1 c2 c3 c4 s c
[1, 2, 3, 4]
(1, 2, 3, 4)
[1, 2, 3, 4]