python基础之二

来源:互联网 发布:985 知乎 编辑:程序博客网 时间:2024/06/13 04:27

python须知的数据结构

  • python提供了几种内置数据结构,包括元组、列表、字典和序列。熟练使用内置数据结构是python语言进行开发的基础。

1. 元组(tuple)

  • 元组是python中常用的一种数据结构,元组有不同的元素组成,每个元素也可以存储不同的数据类型,元组是“写保护”的,元组在创建之后就不能在做任何的修改操作了。
  • 元组由一系列元素组成,所有元素被包含在一对圆括号中,创建元组时,可以不指定元素个数,元组一旦创建就不能修改元组的长度了,元组的创建格式如下:
tuple = (元素1,元素2, ...)   #创建元组tuple = ("apple","banana","grape","orange") # 初始化元组tuple = () # 创建空元组,只需要一堆空的圆括号即可tuple = ("apple",) # 创建单元素元组时,逗号必不可少

: 创建单元素元组时,元素后的逗号不可少,不加逗号则无法区分是元组还是表达式。

  • python中的所有内置数据结构在索引时,都是从0开始计数的,索引0表示第一个元素。
  • 元组中的元素不支持赋值操作,也不能添加或是删除任何元素,元组也没有任何其他的方法,元组的访问可以通过索引获取,包括负数索引和分片索引,这是python语言的特殊用法。负数索引从元组的尾部开始计数,最后一个元素索引为-1,往前依次为-2,-3,…,以此类推。分片索引的格式如下:
tuple[m:n] # 其中m,n可以是0、正整数、负整数,包括索引为m的元素,但不包括索引为n的元素
  • 创建元组的过程,python称为“打包”,反过来,也可以执行“解包”操作,解包可以将元组的各个元素分别赋值给多个变量。
tuple = ("apple","banana","grape","orange") # 打包操作a,b,c,d = tuple # 解包操作
  • 遍历元组需要用到两个python常用的内健函数,range()和len(),可直接调用,len()计算元组的元素总数目,range()返回一个递增或是递减的数字列表。 可以直接使用for … in …语句遍历元组。

2. 列表(list)

  • 列表是python中重要的数据类型,与元组类似,不过列表可以实现添加、删除、查找操作,元素的值也可以修改,这是列表与元组最大的区别。列表由一列元素组成,所有元素包含在一对方括号中,列表创建后,可以执行添加和删除元素的操作。
  • 列表的添加操作可以调用append()函数,列表的删除操作可以是remove()函数,remove()删除列表中的元素,若元素不在列表中,则会出现异常。此外,如果列表中有多个相同的元素,调用remove()移除同名元素将只删除列表中靠前的元素,靠后的元素会被保留。
# 常见列表操作list = ['apple','banana','grape','orange'] #创建列表list.append('watermelon') # 列表末尾添加元素list.insert(1,'grapefruit') # 列表指定位置插入元素list.remove('grape') # 从列表中移除元素list.remove('a')  # 移除列表中不存在的元素会报错list.pop()  # 弹出列表中最后一个元素,相当于取出列表中最后一个元素
  • 列表的使用与元组类似,同样支持负数索引和切片索引,但是列表的元素可以修改。列表还支持连接操作,可以调用extend()函数连接两个不同的列表,也可以使用运算符“+”或“+=”。
list = ['apple','banana','grape','orange']list1 = list[-2:] # 负数索引和切片索引list.extend(list1) # list连接list1list = list + list1 # list连接list1list += list1 # list连接list1list = list * 2 # list连接list,“*”运算符连接多个相同的列表
  • 列表除了上述操作外,还支持查找、排序和反转操作。列表的查找提供了两种方式,一种使用index方法返回元素在列表中的位置,另一种方式是使用关键词“in”判断元素是否在列表中。
list = ['apple','banana','grape','orange']list.index('apple') # 返回元素apple的索引print('apple' in list) # 打印判断语句的结果 

列表的常用方法包括

操作方法 作用描述 list.append(object) 在列表的末尾添加一个对象object list.insert(index,object) 在列表的指定位置添加一个对象 list.remove(value) 删除列表中的首次出现的value元素 list.pop([index]) 删除指定索引位置的值,若不指定位置,则默认删除最后一个元素 list.extend(list1) 将list1连接到list末尾 list.index(value) 返回值value出现在列表中的索引 list.sort() 列表的排序 list.reverse() 列表的反转

3. 字典(dict)

  • 字典是由一系列的“键-值”(key-value)对组成,并且“键-值”对之间用“,”隔开,并且被包含在一对花括号中。字典与Java语言中的HashMap类相似,都是采用“键-值”对映射的方式存放数据。字典的创建与使用非常简单,格式如下:
dictionary = {key1:value1,key2:value2,...} # 创建字典dictionary = {} # 创建空字典value = dict{key}  # 访问字典元素
  • 元组和列表的访问是通过数字索引来获取对应的值,字典是通过key值获取相应的value值。字典的添加、删除和修改也非常简单,字典没有remove()、append()操作,添加和修改操作只需要编写一条赋值语句即可,此赋值语句要么修改已有索引的值,要么添加新的“键-值”对。字典常用方法如下:
操作方法 作用描述 dict.items() 返回字典(key,value)元组组成的列表 dict.iteritems() 返回指向字典的遍历器 dict.setdefault() 创建新的元素并设置默认值 dict.pop() 移除指定索引位置的值,并返回该值 dict.get() 返回指定索引位置的值 dict.keys() 返回字典中所有key的列表 dict.values() 返回字典所有value的列表 dict.copy() 复制一个字典中的所有数据
  • 字典的排序可以使用sorted()函数,排序方式如下:
sorted(dict.items(),keys=lambda d:d[0]) #按照key排序sorted(dict.items(),keys=lambda d:d[1]) #按照value排序
  • 深拷贝与浅拷贝的区别:深拷贝能够拷贝对象内部的所有数据和引用,浅拷贝只是复制数据,并没有复制引用,新数据好旧数据使用同一块内存空间。例如,字典B浅拷贝字典A的数据,如果字典B的数据发生添加、删除、修改等操作,字典A的数据也会改变,相反,若是字典B深拷贝字典A的数据,字典B的数据即使发生改变,也不会影响字典A。使用python的copy模块可以实现对象的深copy和浅copy,copy.deepcopy()用于深copy,copy.copy()用于浅copy。
原创粉丝点击