概述
序列是Python中最基本的数据结构。序列中的每个元素都分配一个数字( 它的位置,或索引),第一个索引是0,第二个索引是1,依此类推。
下面就看看这些数据结构
list
list是python的内置数据类型,以‘[]’标识,包含的数据类可以不同(整数、浮点数、字符串、list、tuple、dict、set、bool、空值、常量)
创建
list1 = [1,2,3,4,'a','b','c',None,2.2] #创建
list2 = list() #空list
list3 = [] #空list
print list1
print list2
print list3
# 结果
[1, 2, 3, 4, 'a', 'b', 'c', None, 2.2]
[]
[]
访问&修改
list1 = [0, 1, 2, 3, 4, 5, 6, 7, 8]
print 'list1[1]:', list1[1]
print 'list1[1:3]', list1[1:3]
print 'list1[2:]', list1[2:]
print 'list1[:5]', list1[:5]
print 'list1[-1]', list1[-1]
# 结果
list1[1]: 1
list1[1:3] [1, 2]
list1[2:] [2, 3, 4, 5, 6, 7, 8]
list1[:5] [0, 1, 2, 3, 4]
list1[-1] 8
list1 = [1,2,3]
print list1
list1[2] = 5
print list1
list1[1] = 8
print list1
# 结果
[1, 2, 3]
[1, 2, 5]
[1, 8, 5]
增加元素&删除元素
list1 = [1,2,3]
print list1
list1.append(4)
print list1
list1.append('a')
print list1
del list1[1]
print list1
# 结果
[1, 2, 3]
[1, 2, 3, 4]
[1, 2, 3, 4, 'a']
[1, 3, 4, 'a']
操作符
list1 = [1,2,3]
print len(list1) # 获取长度
print list1*2 # 重复
print [1,2,3]+[2,3] # 组合
print 1 in list1 #元素是否在列表中
# 结果
3
[1, 2, 3, 1, 2, 3]
[1, 2, 3, 2, 3]
True
方法
- list.count(obj) 计算列表中元素出现的次数
- list.index(obj) 从列表中找出某个值第一个匹配项的索引位置
- list.pop(index) 移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
- list.remove(obj) 移除列表中某个值的第一个匹配项
- list.reverse() 反转列表
- list.sort() 对列表排序
- list.extend() 列表尾部一次性加入多个值
tuple
元祖与list类似,不同的元祖元素不能修改,并且使用’()’标志元祖,创建方式也很简单
创建
tup1 = (1,2,3,4,5)
tup1 = ()
tup1 = tuple()
访问元素
tup1 = (1,2,3,4,5)
print tup1[1]
print tup1[-2]
修改/增加/删除——不允许
操作符-和list一样
set
set是一个无序(不是存入的序列)且不重复的元素集合,也就是set与dict一样,只是没有value,而由于dict的key不重复,且key不可改变,因此set同样具有不重复和元素不可改变的特性
创建
s = set()
print s
s = {1,2,3,4}
print s
s = {1,1,2,3,2}
print s
# 结果
set([])
set([1, 2, 3, 4])
set([1, 2, 3])
set方法
s = {1, 2, 3, 4}
# add
s.add(6)
print s
# 结果
set([1, 2, 3, 4, 6])
# 删除
# pop,移除尾部元素并返回移除的值
s = {11, 22, 33}
temp = s.pop()
print temp
print s
# discard
s.discard(11)
s.discard(55) #删除不存在元素,不报错
print s
# remove 同discard,但删除不存在元素会报错
# 结果
33
set([11, 22])
set([22])
# 更新,obj更新
s1 = {1, 2, 3}
s2 = {2, 3, 4}
s1.update({5})
print s1
s1.update('a')
print s1
# 结果
set([1, 2, 3, 5])
set(['a', 1, 2, 3, 5])
# clear
s1 = {1, 2}
s1.clear()
print s1
# 结果
set([])
# 交集
s1 = {1, 2, 3}
s2 = {2, 3, 5}
# 取交集
print s1.intersection(s2)
# 取交集并更新自己
print s1.intersection_update(s2)
print s1
# 结果
set([2, 3])
None
set([2, 3])
# 差集,交集取反
s1 = {1, 2, 3}
s2 = {2, 3, 4}
temp1 = s1.symmetric_difference(s2)
print temp1
print s1
temp2 = s1.symmetric_difference_update(s2) #更新自己
print temp2
print s1
# 结果
set([1, 4])
set([1, 2, 3])
None
set([1, 4])
# 并集
s1 = {1, 2, 3}
s2 = {2, 3, 4}
temp = s1.union(s2)
print temp
# 结果
set([1, 2, 3, 4])
# 不同
s1 = {1, 2, 3}
s2 = {2, 3, 4}
print s1.difference(s2)
print s2.difference(s1)
# 结果
set([1])
set([4])
# 子集与父集
s1 = {1, 2, 3}
s2 = {1, 2}
print s2.issubset(s1)
print s1.issubset(s2)
print s2.issuperset(s1)
print s1.issuperset(s2)
# 结果
True
False
False
True
总结
- list、tuple是有序列表;dict、set是无序列表
- list元素可变、tuple元素不可变
- dict和set的key值不可变,唯一性
- set只有key没有value
- set的用途:去重、并集、交集等
- dict查询效率高,但是消耗内存多;list、tuple查询效率低、但是消耗内存少