Python基础数据结构

一、简介

Python中自带有几类常见的数据结构,元组、列表、字典、集合。

 

二、元组

1、定义

#元组是一个固定长度,不可改变的Python序列对象。

2、特点

#长度一旦确定,则不可改变

#内容一旦确定,则不可改变。特殊情况,当它的某个元素本身的内容是可变的,则可以 改 变该元素其中的内容

3、创建

tup = 4, 5, 6 或 tup = (4, 5, 6) #当使用复杂表达式定义元组时,需要使用圆括号

tuple([4, 5, 6]) #使用tuple可以将任意序列或迭代器转换成元组

4、访问

tup[0] #下标访问,从0开始

5、运算

(1, 2) + (3, 4) = (1,2,3,4) #连接两个数组

(1,2)* 2 = (1,2,1,2) #复制多倍

6、自动拆分

tup = (4,5,6)

a,b,c = tup #系统会试图拆分等号右边的值,更复杂的也是。

a,b = b,a #特殊用法:用于交换两个变量的值

#变量拆分用于迭代元组或列表序列

#用于函数返回多个值

values = 1,2,3,4,5,6 #复杂的拆分功能

a,b,*_ = values #取前几个元素

a = 1,b = 2, _ = [ 3,4,5,6 ] #剩下的是列表

7、方法

values.count(2) #统计元组中某个元素出现的次数

 

三、列表

1、定义

#与元组类似,特点及定义方式不同

2、特点

#列表长度可变

#内容可以被修改

3、创建

list1 = [1, 2, 3] #用方括号定义

list2 = list(tup) #将元组等转换成列表

list = list(range(10) #常用来在数据处理中实体化迭代器或生成器

4、修改和访问

list1[1] = 4 #通过下标修改

list1[1] #通过下标访问

5、添加和删除

list1.append('asdf') #列表末尾添加元素

list1.insert(1, 'red') #指定位置插入元素,插入的序号在0到列表长度之间

#insert 耗费的计算量很大,需要进行元素的移动

list1.pop(2) #移除并返回指定位置的元素,insert() 逆运算

list1.remove(1) #移除第一次出现的指定元素

#使用 in 和 not in 可以检查列表中是否包含或不包含某个元素,速度很慢,因为线性搜索

6、运算

[1,2,3] + [4,5,6] = [1,2,3,4,5,6] #串联两个列表,计算量大

x = [1,2,3]

x.extend([4,5,6]) #extend() 追加多个元素

7、排序

#使用sort()函数进行原地排序

#sort函数可以加参数 ,对字符串按长度进行排序 b.sort(key = len)

8、二分搜索和维护已排序的列表

bisect.bisect(c, 2) #检查已排好序列表中插入某元素的位置

bisect.insert(c, 2) #向已排好序的列表中插入某元素

9、切片

#选择序列元素的一部分

seq[start : end : step ] #格式,包含的元素个数位end-start,不包括结束元素;start和end均可省略,默认为序列的开头和结尾;step表示步进,可选参数。

#切片也可被赋值

seq[-6, -2] #负数表示向后切片,且end位置终点为-1,不是 0。

seq[ : : -1 ] #逆置列表或元组

10、序列函数

# enumerate 函数可以返回(i, value)元组序列

# sorted 函数可以返回一个新的排好序的列表,同sort 函数相同的参数

# zip 函数可以将多个列表、元组或其他序列成对组合成一个元组列表

f, l = zip(*列表名) # zip 可以用来解压序列,也可以把行的列表转换成列的列表

#reversed 函数可以从后向前迭代一个序列,是一个生成器

 

四、字典

1、定义

#又称哈希映射或关联数组,是键值对的大小可变集合,键和值都是Python对象。

# keys 和 values 是字典的键和值的迭代器方法

2、创建

d1 = { 'a' : 1, 'b' : [1,2,3] } #使用尖括号

#使用两个序列组合成字典 使用 zip

mapping = dict(zip(range(5), reversed(range(10))))

3、访问、插入

#同元组和列表,其中可以使用get(key, default_value) 获取

d1.setdefault(letter, []).append(word) #简化 if - else 操作

#使用 in 检查字典中是否包含某个键

4、删除

del d1[键名] #只删除

d1.pop(键名) #删除键值对并返回值

5、运算

d1.update({ 'b' : 'foo' }) #可以将两个字典进行融合,原地改变,相同键的值会被覆盖掉

6、有效的键类型

#键通常需要是不可变的标量类型(整数、浮点数、字符串)或元组(元组中的对象也必须

是不可变的),称为“可哈希性”,使用 hash函数 检测一个对象是否是可哈希的

 

五、集合

1、定义

是(无序)的(不可重复)的元素的集合。

2、特点

#序列无须

#类似字典,只有键没有值

3、创建

set([1,2,3]) #使用set转换

{1,2,3} #使用尖括号,同字典,但内部元素组织不同

4、运算

add() #添加元素

clear() #清空元素

remove() #移除元素

pop() #去除任意元素

a.union(b) or a | b #合并 a.update(b) or a |= b #合并并放入a中

a.intersection(b) or a & b #交集 a.intersection)_update(b) or a &= b #交集放入a中

a.difference(b) or a - b #差集,留下a中特有的元素 a.difference_update(b) or a -= b

a.symmetric_difference(b) or a^b #只在a或b中的元素

a.symmetric_difference_update(b) or a^=b #只在a或b中的元素放入a中

a.issubset(b) #如果a中元素全部属于b,则为true

a.issuperset(b) #如果b中元素全部属于a,则为true

a.isdisjoint(b) #如何a、b中无共同元素,则为true

{1,2,3} = {3,2,1} #集合的内容相同时,集合才对等

 

六、列表、集合、字典推导式

1、定义

#允许用户从集合中过滤元素,形成列表,参数传递的过程中还可以修改元素。

#列表形式 :list_comp = [ expression for val in collection if condition ]

#集合形式 :set_comp = { expr for key in collection if condition }

#字典形式 :dict_comp = { key-expr : value-expr for value in collection if condition }

 

2、进阶 -- 嵌套列表推导式

#将两重for循环进行整合,for表达式的顺序与嵌套for循环的顺序是一样的。

 

 

 

你可能感兴趣的:(Python,Python入门学习,Python,数据结构,元组,列表,字典)