|
|
--- |
|
|
title: 理解Python中列表,元组,字典,集合的区别 |
|
|
date: 2020-09-14 20:28:41 |
|
|
updated: 2021-06-17 09:12:37 |
|
|
tags: |
|
|
categories: |
|
|
keywords: |
|
|
description: |
|
|
top_img: |
|
|
comments: |
|
|
cover: |
|
|
toc: |
|
|
toc_number: |
|
|
toc_style_simple: |
|
|
copyright: |
|
|
copyright_author: |
|
|
copyright_author_href: |
|
|
copyright_url: |
|
|
copyright_info: |
|
|
katex: true |
|
|
highlight_shrink: |
|
|
aside: |
|
|
--- |
|
|
|
|
|
列表,元组,字典,集合的区别是python面试中最常见的一个问题。这个问题虽然很基础,但确实能反映出面试者的基础水平。 |
|
|
# 1.列表(List) |
|
|
什么是列表呢?我觉得列表就是我们日常生活中经常见到的清单。比如,统计过去一周我们买过的东西,把这些东西列出来,就是清单。由于我们买一种东西可能不止一次,所以清单中是允许有重复项的。如果我们扩大清单的范围,统计我们过去一周所有的花费情况,那么这也是一个清单,但这个清单里会有类别不同的项,比如我们买东西是一种花费,交水电费也是一种花费,这些项的类型是可以使不同的。python的列表个跟清单的道理是一样的,特点就是:可重复,类型可不同。类型不同也是跟数组最本质的区别了。python里的列表用“[]”表示。 |
|
|
```python |
|
|
#定义一个列表 |
|
|
listA = ['a', 'b', 'c', 1, 2] |
|
|
|
|
|
listA[1] # 'b' |
|
|
|
|
|
# 向 list 中增加元素 |
|
|
|
|
|
# 1.使用append 向list 的末尾追加单个元素。(把列表当做堆栈使用——后进(后出)) |
|
|
#listA = ['a', 'b', 'c', 1, 2, 3] |
|
|
listA.append(3) |
|
|
|
|
|
# 2.使用 insert 将单个元素插入到list 中。数值参数是插入点的索引 |
|
|
# 在下标为3处插入一个元素,listA = ['a', 'b', 'c', 'd', 1, 2, 3] |
|
|
listA.insert(3, 'd') |
|
|
|
|
|
# 3.使用 extend 用来连接 list |
|
|
# listA = ['a', 'b', 'c', 'd', 1, 2, 3, 7, 8] |
|
|
listA.extend([7, 8]) |
|
|
|
|
|
# 获取列表的长度 |
|
|
print len(listA) # 9 |
|
|
|
|
|
# 在 list 中搜索 |
|
|
listA.index(3) # index 在 list 中查找一个值的首次出现并返回索引值。 |
|
|
listA.index('100') # 如果在 list 中没有找到值,Python 会引发一个异常。 |
|
|
|
|
|
print 5 in listA # 要测试一个值是否在 list 内,使用 in。如果值存在,它返回 True,否则返为 False 。 |
|
|
|
|
|
# 从 list 中删除元素 |
|
|
listA.remove(3) # remove 从 list 中 仅仅 删除一个值的首次出现。如果在 list 中没有找到值,Python 会引发一个异常 |
|
|
|
|
|
print listA.pop() # pop 它会做两件事:删除 list 的最后一个元素,然后返回删除元素的值。(把列表当做堆栈使用——(后进)后出) |
|
|
|
|
|
# 还有一种把列表当做队列使用,最先进入的元素最先释放(先进先出) |
|
|
# 不过,列表这样用效率不高。相对来说从列表末尾添加和弹出很快; |
|
|
# 在头部插入和弹出很慢(因为,为了一个元素,要移动整个列表中的所有元素)。 |
|
|
|
|
|
# 遍历list |
|
|
for item in listA: |
|
|
print item |
|
|
———————————————— |
|
|
版权声明:本文为CSDN博主「Yeoman92」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 |
|
|
原文链接:https://blog.csdn.net/Yeoman92/article/details/56289287 |
|
|
``` |
|
|
extend (扩展) 与 append (追加) 的看起来类似,但实际上完全不同。 |
|
|
extend 接受一个参数,这个参数总是一个 list,并且把这个 list 中的每个元素添加到原 list 中。 |
|
|
append 接受一个参数,这个参数可以是任何数据类型,并且简单地追加到 list 的尾部。 |
|
|
```python |
|
|
>>> li = ['a', 'b', 'c'] |
|
|
>>> li.extend(['d', 'e', 'f']) |
|
|
>>> li |
|
|
['a', 'b', 'c', 'd', 'e', 'f'] |
|
|
>>> len(li) |
|
|
6 |
|
|
>>> li[-1] |
|
|
'f' |
|
|
>>> li = ['a', 'b', 'c'] |
|
|
>>> li.append(['d', 'e', 'f']) |
|
|
>>> li |
|
|
['a', 'b', 'c', ['d', 'e', 'f']] |
|
|
>>> len(li) |
|
|
4 |
|
|
>>> li[-1] |
|
|
['d', 'e', 'f'] |
|
|
———————————————— |
|
|
版权声明:本文为CSDN博主「Yeoman92」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 |
|
|
原文链接:https://blog.csdn.net/Yeoman92/article/details/56289287 |
|
|
``` |
|
|
# 2.元组(Tuple) |
|
|
元组和列表在结构上没有什么区别,唯一的差异在于元组是只读的,不能修改。元组用“()”表示 |
|
|
```python |
|
|
#定义一个元组 |
|
|
tuple1 = (1,2,'a',4,'5',6) |
|
|
|
|
|
# 定义了一个元组之后就无法再添加或修改元组中的元素 |
|
|
|
|
|
print tuple1[2] # 'a' 元组的元素都有确定的顺序。元组的索引也是以0为基点的 |
|
|
print tuple1[-1] # '5' 负的索引从元组的尾部开始计数 |
|
|
print tuple1[1:3] # (2, 'a') 元组也可以进行切片操作。对元组切片可以得到(返回)新的元组,原元组不变 |
|
|
|
|
|
# 可以使用 in 运算符检查某元素是否存在于元组中。 |
|
|
print 1 in tuple1 # True |
|
|
|
|
|
#使用for in 进行遍历元组 |
|
|
for item in tuple1: |
|
|
print item |
|
|
|
|
|
# 如果需要获取item的序号 可以使用下面的遍历方法: |
|
|
for index in range(len(tuple1)): #range(len(tuple1))就是生成一个自然排序列表 |
|
|
print tuple1[index] |
|
|
|
|
|
# 还可以使用内置的enumerate函数 |
|
|
for index, item in enumerate(tuple1): |
|
|
print '%i, %s' % (index, item) |
|
|
———————————————— |
|
|
版权声明:本文为CSDN博主「Yeoman92」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 |
|
|
原文链接:https://blog.csdn.net/Yeoman92/article/details/56289287 |
|
|
``` |
|
|
# 3.字典(Dictionary) |
|
|
字典定义了键和值之间一对一的关系,但它们是以无序的方式储存的。 Python 中的 dictionary 像 Java 中的 Hashtable 类的实例。定义 Dictionary 使用一对大(花)括号 { } |
|
|
1, Dictionary 不只是用于存储字符串。Dictionary 的值可以是任意数据类型,包括字符串、整数、对象,甚至其它的 dictionary。 |
|
|
2, 在单个 dictionary 里,dictionary 的值并不需要全都是同一数据类型,可以根据需要混用和匹配。 |
|
|
```python |
|
|
# 定义一个字典 |
|
|
dict1 = {'name' : 'yeoman', 'age' : 24, 'sex' : 'Male'} |
|
|
|
|
|
dict1['name'] = 'yuanm' # 为一个已经存在的 dictionary key 赋值,将简单覆盖原有的值。 |
|
|
dict1['Age'] = 25 # 在 Python 中是区分大小写的 age和Age是完全不同的两个key |
|
|
|
|
|
# 从字典中删除元素 |
|
|
del dict1['sex'] # del 允许您使用 key 从一个 dictionary 中删除独立的元素 |
|
|
|
|
|
dict1.clear() # clear 从一个 dictionary 中清除所有元素 |
|
|
———————————————— |
|
|
版权声明:本文为CSDN博主「Yeoman92」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 |
|
|
原文链接:https://blog.csdn.net/Yeoman92/article/details/56289287 |
|
|
``` |
|
|
# 4.集合(Set) |
|
|
Python的集合(set)和其他语言类似, 是一个无序不重复元素集, 基本功能包括关系测试和消除重复元素. 集合对象还支持union(联合), intersection(交), difference(差)和sysmmetric difference(对称差集)等数学运算.由于集合是无序的,所以,sets 不支持 索引, 分片, 或其它类序列(sequence-like)的操作。 |
|
|
1, 集合也存在不可变形式,frozenset为固定集合. |
|
|
2, set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。 |
|
|
3, 注意:想要创建空集合,你必须使用 set() 而不是 {} ,后者用于创建空字典 |
|
|
4, 可以通过一个set函数转换成集合,如: |
|
|
```python |
|
|
lst = [ 1, 1, 0] |
|
|
|
|
|
lst_set = set( lst ) #lst_set 为1 , 0 |
|
|
|
|
|
tup = (2, 2, 1) |
|
|
|
|
|
tup_set = set( tup) # tup_set为2 , 1 |
|
|
|
|
|
for item in lst_set: |
|
|
print item |
|
|
———————————————— |
|
|
版权声明:本文为CSDN博主「Yeoman92」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 |
|
|
原文链接:https://blog.csdn.net/Yeoman92/article/details/56289287 |
|
|
``` |
|
|
```python |
|
|
# 使用 set 函数创建集合 |
|
|
list1 = [6, 7, 7, 8, 8, 9] |
|
|
set2 = set(list1) |
|
|
|
|
|
set2.add(10) # 添加新元素 |
|
|
print set2 # set([8, 9, 10, 6, 7]) 去掉重复内容,而且是无序的 |
|
|
|
|
|
set3 = frozenset(list1) |
|
|
#set3.add(10) # 固定集合不能添加元素,会报错AttributeError: 'frozenset' object has no attribute 'add' |
|
|
|
|
|
### 集合有并集,交集,求差操作 |
|
|
### a & b 并集:intersection() 方法返回一个新集合,包含在两个集合中同时出现的所有元素。 |
|
|
### a | b 交集:union() 方法返回一个新集合,包含在两个 集合中出现的元素。 |
|
|
### a - b 差集:difference() 方法返回的新集合中,包含所有在 集合A出现但未在集合B中的元素。 |
|
|
### a ^ b 对称差集:symmetric_difference() 方法返回一个新集合,包含所有只在其中一个集合中出现的元素。 |
|
|
|
|
|
# 删除元素 |
|
|
set2.discard(6) # 当元素不存在时,不会引发异常 |
|
|
set2.remove(6) # 与discard的区别在于,如果没有要删除的元素,remove会引发一个异常 |
|
|
set2.pop() # 因为set是无序的,所以pop会随机的从set中删除一个元素 |
|
|
———————————————— |
|
|
版权声明:本文为CSDN博主「Yeoman92」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 |
|
|
原文链接:https://blog.csdn.net/Yeoman92/article/details/56289287 |
|
|
``` |
|
|
|
|
|
|