PS教程:数据的容器一、列表列表

数据的容器 一、列表

列表(list)是一个有序的序列结构,序列中的元素可以是不同的数据类型 列表可以进行一系列序列操作,如索引、切片、加、乘和检查成员等

列表创建

将列表中的各元素用逗号分隔开,并用中括号将所有元素包裹起来

eg:
	list = [2,'Jump Shot']
	print list 

列表对象的增减

使用()方法添加元素,该方法会在列表末尾位置添加数据元素

eg:
	list.append('aaa')

()方法使用与知道要删除的值的情况,当我们不知道具体元素值,但是知道元素的索引位置时,我们可以使用del函数配合列表索引,删除索引位置的元素或使用pop()方法

eg:
	#删除指定元素的值
	list.remove('aaa')
	#删除列表中倒数第二个值
	del list[-2]
	#删除列表中正数第二个值
	del list[1]
	#取出最后一个元素,且不放回
	list.pop()
	#取出倒数第二个元素,且不放回
	list.pop(-2)

通过()方法在指定的索引位置添加数据元素

	#指定下标插入数据
	list.insert(2,"scala")

列表索引

语言中所有的索引都是从0开始计数的,如果列表中有n个元素,那么最后一个元素的索引是n-1

列表长度

内置的用于判断列表长度的函数为len()

eg:
	print len(list)

列表切片(返回新的列表)

切片操作需要提供起始索引位置和最后索引位置然后用冒号将两者分开

列表名称[起始索引位置:最后索引位置:步长]

如果未输入步长,则默认步长为1

切片操作返回一系列从起始索引位置开始到最后索引位置结束的数据元素

起始索引位置的值包含在返回结果中,而最后索引位置的值不包含在在返回结果中

eg:
	list = [1,2,3,4,5,6,7,8,9]
	print list[2:6]
	print list[2:-3]
	print list[-7:-3]
	输出结果均为[3,4,5,6]
	
	#输出所有偶数、步长为2
	print list[1:-1:2]
	
	#逆向切片,步长为负数,输出[9,8,7,6]
	print list[-1:-5:-1]
	#通过切片反转列表
	print list[::-1]

嵌套列表

列表中的元素也可以是列表python的列表和字典,这样可以将列表看成更高维的数组

eg:
	list = [[1,2],'aaa']

二、元组

元组(tuple)数据结构与列表类似,其中元素可以有不同的类型。但是元组中的元素是不可变的PS教程:数据的容器一、列表列表,即一旦初始化之后,就不能再做修改。

创建元组

	#创建元组
	tuple = ("java",1,2)
	#修改
	tuple[1] = "scala"
	(报错:元组对象不支持赋值)

由于元组是不可变的,因此元组对象没有()、()、del()这样的方法。不改变内容的方法可以使用

注:tuple切片,实际上是返回一个新的tuple

tuple的使用可以使代码更安全,防止错误赋值导致重要对象的改变

三、字典

字典(dict)在其他语言中被称作哈希映射(hash map)或者相关数组( )

应用

字典是一种大小可变的键值对集,其中的键(key)和值(value)都是对象

字典用在需要快速查找的地方

字典创建

字典的创建使用大括号{}包含键值对,并用冒号:分隔键和值

字典中的数据元素是无序的,并不会按照初始化的顺序排列。不同键所对应的值可以相同,但是字典中的键必须是唯一的

利用for循环和zip()函数创建字典

zip()函数用于将多个序列(列表、元组等)中的元素配对,产生一个如[(列表1元素,列表2元素),()]的新的元组列表。for循环用于重复执行将值放入键中的操作。

字典索引

字典的元素访问(以及插入、设置)方式与列表和元组一样。不同的是,列表和元组的索引号是按照顺序自动生成的,而字典的索引号是键

字典中某值的索引还可以通过get方法,如果字典不包含某个键,可以返回None,或者自己指定的值

我们可以通过in判断是否存在某个键,其语法跟在列表和元组中判断是否存在某个值是相同的python的列表和字典,也可以使用内置的()方法

如果不太确定字典中有哪些键或者值,我们可以使用keys()方法或者()方法

在有些情况下,我们需要取出字典中的键值对用于下一步的分析,此时可以使用items()方法,该方法将返回所有键值对,并将其保存在一个元组列表(列表中的元素为元组)中

字典的删减有三种方法

使用del函数对单一元素或者整个字典进行删除

使用pop()方法删除单一元素

使用clear()方法清空词典的所有元素

eg:
	#字典创建
	dict = {1:"java",2:"scala","3":"python"}
	#根据key获取value的值
	print dict["3"]
	#zip()函数和for循环举例
	keyList = [1,2,3,4]
	valueList = ['1','2','3','4']
	a = zip(keyList,valueList)
	print type(a)
	print a
	for i in keyList:
		print i
	for k,v in a:
		print k,v
	
	dict2 = {}
	for k,v in a:
		dict2[k] = v
	#如果键不存在会报异常
	#print dict2[6]
	#如果键不存在返回None
	print dict2.get(6)
	
	#判断键是否存在
	print 6 in dict2
	print dict2.has_key(6)
	if 4 in dict2:
		print dict2[4]
	
	
	#输出结果
	[(1,'1'),(2,'2'),...]
	1
	2
	3
	4
	1 1
	2 2
	3 3
	4 4
	{1:'1',2:'2',3:'3',4:'4'}
	None
	False
	False
	4

四、集合

集合(set)是一种无序集,它是一组键的集合,不存储值在集合中,重复的键是不被允许的。集合可以用于去除重复值

应用

去重。把一个列表变成集合,就自动去重了

关系测试。测试两组数据之前的交集、差集、并集等关系

集合创建

使用set()函数或者使用大括号

需要注意的是,创建空集合PS教程:数据的容器一、列表列表,必须使用set(),而不是{}python的列表和字典,因为{}表示创建一个空的字典

集合运算

集合支持数学集合运算,如并、交、差以及对称差(异或)等

或(|)与(&)差(-)对称差(^)

eg:
	#创建集合(无序,不唯一)
	set2 = {"aaa",1,2}
	创建空集合
	set1 = set()