python有序数据类型有哪些_Python 数据类型

前言

Python 的数据类型有以下几种,数值类型这里就不再介绍了,本章主要介绍 List、Tuple、Dictionary、Set。

列表 List

List 是一种有序的集合,可以随时添加和删除其中的元素。

创建

定义 List 只需要将元素用 [ ] 包含进来即可,元素之间用 , 分割。

1classmates = ['Michael', 'Bob', 'Tracy']

由于Python是动态语言,所以 List 中包含的元素并不要求都必须是同一种数据类型,我们完全可以在 List 中包含各种数据:

1L = ['Michael', 100, True]

访问

List 可以通过索引来获取指定元素。索引从 0 开始。

123456# coding=utf-8classmates = ['Michael', 'Bob', 'Tracy']i = 0while i < len(classmates): print("索引为 %d 的元素为:%s"%(i,classmates[i])) i+=1

添加元素

使用 append() 和 insert() 方法都可以将元素添加进去,一个是添加到 List 的末尾,一个是插入到指定位置。

12345678# coding=utf-8A = ["A", "B", "C"]A.append("D") # 向末尾添加一个元素 Dprint AA.insert(0, "A") # 向第 0 个位置插入一个元素 Aprint A

删除元素

使用 pop() 方法可以将 List 中的元素删除。

12345678# coding=utf-8A = ["A", "B", "C", "D"]A.pop() # 删除末尾的一个元素print AA.pop(0) # 删除索引为 0 的元素print A

元组 Tuple

Tuple 是另一种有序的列表,中文翻译为“ 元组 ”。Tuple 和 List 非常类似,但是,Tuple一旦创建完毕,就不能修改了。

创建

创建tuple和创建list唯一不同之处是用 ( )替代了 [ ]。

1t = ('Adam', 'Lisa', 'Bart')

现在,这个 t 就不能改变了,tuple没有 append() 方法,也没有 insert() 和 pop() 方法。

获取 tuple 元素的方式和 list 是一模一样的,也是使用索引来获取元素的。

tuple 创建时也可以省略 [ ]:t = 1, 2, 3,这样也是定义一个 tuple。

虽然 Tuple 的是不可变的,但我们可以用特殊的方法来创建一个 “可变” 的 Tuple。

123456789L = ['A', 'B']T = ['a', 'b', L]print TL[0] = 'X'L[1] = 'Y'print T

运行结果:['a', 'b', ['A', 'B']]

['a', 'b', ['X', 'Y']]

不是说 Tuple 一旦定义后就不可变了吗?怎么现在又变了?

别急,我们先看看定义的时候 Tuple 包含的 3 个元素:

当我们把 List 的元素 ‘A’ 和 ‘B’ 修改为 ‘X’ 和 ‘Y’ 后,Tuple 变为:

表面上看,Tuple 的元素确实变了,但其实变的不是 Tuple 的元素,而是 List 的元素。

Tuple 一开始指向的 List 并没有改成别的 List,所以,Tuple所谓的“不变”是说,Tuple的每个元素,指向永远不变。即指向 ‘a’,就不能改成指向 ‘b’,指向一个 List,就不能改成指向其他对象,但指向的这个 List 本身是可变的!

字典 Dict

创建

用 List 和 Tuple 可以用来表示顺序集合,例如,班里同学的名称:

1L = ['Adam', 'Lisa', 'Bart']

或者考试的成绩列表:

1L = [95, 85, 59]

但是,要根据名字找到对应的成绩,就没办法表示了。所以就用到了 Dict,中文叫做字典:

12345d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59}

花括号 { } 表示这是一个 Dict,然后按照 key: value,写出来即可。最后一个 key: value 的逗号可以省略。

访问

可以简单地使用 d[key] 的形式来查找对应的 value:

12345678d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59}print d['Adam']print d['Lisa']print d['Bart']

注意:通过 key 访问 Dict 的 value,只要 key 存在,Dict 就返回对应的 Value。如果 key 不存在,会直接报错:KeyError。

为了避免 KeyError 发生,有两个办法:使用 in 操作符来判断 key 是否存在,'Paul' in d,’Paul’ 不存在,则返回 False,存在返回 True。

使用 Dict 本身提供的一个 get 方法,d.get("Paul"),在 Key 不存在的时候,返回 None。

更新

添加和 修改 在这里归类为更新。

1234567d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59}print d{'Lisa': 85, 'Adam': 95, 'Bart': 59}

添加一条信息:

1d['Paul'] = 72

在看看 dict 的内容:

12print d{'Lisa': 85, 'Paul': 72, 'Adam': 95, 'Bart': 59}

如果 key 已经存在,则赋值会用新的 value 替换掉原来的 value,也就是修改元素了:

12345678910d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59}print d# result:{'Lisa': 85, 'Adam': 95, 'Bart': 59}d['Lisa'] = 90print d# result:{'Lisa': 90, 'Adam': 95, 'Bart': 59}

删除

1234567891011121314# coding=utf-8d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59}print dd.pop('Lisa') # 删除给定键对应的值print dd.popitem() #随机删除字典内容print dd.clear() # 清空字典内容print d

运行结果:{'Lisa': 85, 'Adam': 95, 'Bart': 59}

{'Adam': 95, 'Bart': 59}

{'Bart': 59}

{}

遍历

1234567891011121314# coding=utf-8d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59}for key in d: print key, ':', d[key]print("---------")for key,val in d.items(): print key, ':', val

特点查找速度快,无论 Dict 有多少个元素,查找速度都是一样的,但是占用空间大。

由于 Dcit 是按照 key 查找,所以,在一个 Dict 中,key 不能重复。

Dict 存储的 key-value 是没有顺序的。

Dict 中作为 key 的元素必须是不可变的。Python 的基本数据类型如字符串、整数、浮点数都是不可变的,都可以作为 key,但是 list 是可变的,就不能作为 key。

集合 Set

创建

有时候,我们只想要保证元素不重复,但是用 Dict 的键值对形式又没必要,所以就有了 Set。

创建 Set 的方式是调用 set() 并传入一个 List,List 的元素将作为 Set 的元素:

123s = set(['A', 'B', 'C', 'C'])print s# result : set(['A', 'C', 'B'])

由此可以看出 Set 是无序的,且不允许重复,传入的重复元素会被自动去除。

添加

添加元素时,使用 set 的 add() 方法:

1234s = set([1, 2, 3])s.add(4)print s# result : set([1, 2, 3, 4])

如果添加的元素已经存在于set中,add()不会报错,但是不会加进去了:

删除

删除 set 中的元素时,用 set 的 remove() 方法:

1234s = set([1, 2, 3, 4])s.remove(4)print s# result : set([1, 2, 3])

如果删除的元素不存在 set 中,remove() 会报错:

1234567s = set([1, 2, 3])s.remove(4)## Error Message:Traceback (most recent call last): File "", line 1, in KeyError: 4

所以 remove() 之前最好判断一下。

遍历

123s = set([('Adam', 95), ('Lisa', 85), ('Bart', 59)])for x in s: print x[0] + ':',x[1]

输出结果:Lisa: 85

Adam: 95

Bart: 59

运算符

Python 很强大,关于一些特殊的数据类型还有运算符:

运算符Python 表达式结果描述支持的数据类型+[1, 2] + [3, 4][1, 2, 3, 4]合并字符串、列表、元组

*‘Hi!’ * 4[‘Hi!’, ‘Hi!’, ‘Hi!’, ‘Hi!’]复制字符串、列表、元组

in3 in (1, 2, 3)True元素是否存在字符串、列表、元组、字典、集合

not in4 not in (1, 2, 3)True元素是否不存在字符串、列表、元组、字典 、集合

内置函数

Python 中还有很多内置的函数,这里我们介绍一些常用的关于基本数据类型的内置函数:

序号方法描述1cmp(item1, item2)比较两个值

2len(item)计算容器中元素个数

3max(item)返回容器中元素最大值

4min(item)返回容器中元素最小值

5del(item)删除变量

其他

可变类型与不可变类型

可变类型,值可以改变:列表 List

字典 Dict

不可变类型,值不可以改变:数值类型 int, long, bool, float

字符串 str

元组 tuple

值传递还是引用传递?

关于 Pyhton 中函数传递参数的问题,Python 中有可变类型和不可变类型,在参数传递的时候分为两种情况:对于不可变类型,调用自身的任意方法,并不会改变对象自身的内容,这些方法会创建新的对象并返回,保证了不可变对象本身是永远不可变的。

对于可变类型,调用自身的任意方法,会改变对象自身的内容。我们可以用 id() 来判断两个变量是否为同一个值的引用。 我们可以将 id 值理解为那块内存的地址标示。

1 2 3 4 5 6 7 8 9 10 11>>> a = 1 >>> b = a >>> id(a) 13033816 >>> id(b) # 注意两个变量的id值相同 13033816 >>> a = 2 >>> id(a) # 注意a的id值已经变了 13033792 >>> id(b) # b的id值依旧 13033816

你可能感兴趣的:(python有序数据类型有哪些)