python - 数据结构

Posted 小虫虫的大梦想

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python - 数据结构相关的知识,希望对你有一定的参考价值。

数据结构(Data Structures)人如其名,只是一种结构,能够将一些数据聚合在一起。换句话说,它们是用来存储一系列相关数据的集合。python中有四种内置的数据结构:

  • 列表(list)
  • 元组(tuple)
  • 字典(dictionary)
  • 集合(set)

另外,讲解以下三部分内容:

  • 序列
  • 引用
  • 字符串的常用方法

1. 列表

列表:用于保存一系列有序项目的集合。语法:用方括号括起来,中间用逗号隔开。如:

shoppinglist = [‘apple‘, ‘orange‘, ‘banana‘]

可以向列表中添加任何类型的对象,包括字符串、数字,甚至可以是其他列表

列表也是一个序列 

可对列表中的项目进行增删改查,所以说列表是一种可变的数据类型
1
shoppinglist = [apple, orange, banana] 2 3 print(shoppinglist) # 打印整个列表 4 5 for list1 in shoppinglist: # 打印列表中的元素 6 print(list1) 7 8 shoppinglist.append(pear) # 向列表后追加元素 9 shoppinglist[0] = aaa # 修改列表中的第一个元素的值为aaa 10 shoppinglist.remove(shoppinglist[0]) # 删除列表中的第一个元素 11 del shoppinglist[0] # 方法二:删除列表中的第一个元素 12 13 first_one = shoppinglist[0] # 取出列表中的第一个元素 14 len(shoppinglist) # 列表的长度(列表中元素的个数) 15 shoppinglist.sort() # 排序,影响的是列表本身(与修改字符串的方式不同)(列表是可变的,字符串是不可变的)
资格测试
1
mylist = [apple, orange, banana] 2 3 if apple in mylist: # 判断apple是否在mylist中 4 print(yes) 5 else: 6 print(no)

 

2. 元组

用于将多个对象保存在一起。语法:用圆括号括起来,中间用逗号隔开。如:

zoo = (‘apple‘, ‘orange‘, ‘banana‘)

元组也是一个序列

 元组可以近似的看做一个列表,但元组不可改变。
1
zoo = (apple, orange, banana) 2 3 print(zoo) # 打印元组(‘apple‘, ‘orange‘, ‘banana‘) 4 5 for i in zoo: # 打印元组中的元素 apple orange banana 6 print(i) 7 8 print(len(zoo)) # 打印元组的长度 3 9 10 new_zoo = (pear, mongo, zoo) 11 12 # 元组中所包含的元组,不会失去其所拥有的身份 13 print(new_zoo) # 打印新的元组 (‘pear‘, ‘mongo‘, (‘apple‘, ‘orange‘, ‘banana‘)) 14 print(new_zoo[1]) # 方括号[],索引运算符 mongo 15 print(new_zoo[2]) # (‘apple‘, ‘orange‘, ‘banana‘) 16 print(new_zoo[2][2]) # banana 17 print(len(new_zoo)) # 3 18 19 # 空元组 20 myempty = () 21 print(myempty) # () 22 23 # 包含一个元素的元组 24 single = (2,) # 必须在项目后面加上一个逗号来指定它,这样python才可以识别出这个表达式想表达的是元组还是对象 25 print(single) # (2,)

 

3. 字典

键值对(key-value)结构。语法:用一对大括号括起来,键与值之间用冒号分隔,每一个键值对之间用逗号分隔。如:

ab = {‘zhangsan‘:‘zhangsan@126.coom‘,
‘lisi‘:‘lisi@126.com‘,
‘wangmazi‘:‘wangmazi@qq.com‘}

键必须唯一,且不可变。值可以变。字典不能排序。

可以给字典添加键值对,删除键值对,修改键的值内容。是可变的数据类型。
1
ab = {zhangsan:zhangsan@126.coom, 2 lisi:lisi@126.com, 3 wangmazi:wangmazi@qq.com} 4 5 print(ab) # 打印整个字典 6 7 print(ab[zhangsan]) # 打印字典中的某个元素(某个键的值)(用索引运算符,找到某个键对应的值) 8 9 for key, value in ab.items(): # 打印字典中的所有元素(所有键值对) 10 print(key, value) 11 12 ab[wangmazi] = wangmazi@126.com # 修改键名为wangmazi的值 13 ab[wangwu] = wangwu.126.com # 添加一个键值对 14 del ab[wangwu] # 删除字典中键为wangwu的键值对 15 16 print(len(ab)) # 打印字典的长度(键值对的数量) 17 if wangmazi in ab: # 若字典中存在键名为wangmazi的键,则打印出它的值 18 print(ab[wangmazi])

 ps:

print(ab.items())  # dict_items([(‘zhangsan‘, ‘zhangsan@126.coom‘), (‘lisi‘, ‘lisi@126.com‘), (‘wangmazi‘, ‘wangmazi@qq.com‘)])

ab.items()返回一个包含元组的列表。每一个元组中包含一个键值对。用for循环打印时,将每一个配对信息分配给key和value变量  

 

4. 集合

 简单对象的无序集合。语法:set([列表])。如:

bri = set([‘apple‘, ‘orange‘, ‘banana‘])

当集合中的元素存在与否,比次序或出现次数更加重要时,使用集合。集合的作用:

  • 测试某些元素的资格
  • 检查是否是其他集合的子集
  • 找到两个集合的交集等
 1 bri = set([apple, orange, banana])
 2 
 3 print(apple in bri)   # True
 4 print(mongo in bri)   # False
 5 
 6 bric = bri.copy()       # 复制一个集合
 7 
 8 bric.add(pear)        # 添加一个元素
 9 bric.remove(banana)   # 删除一个元素
10 
11 print(bric.issuperset(bri))   # bric是否是bri的父集ic
12 print(bric.issubset(bri))     # bric是否是bri的子集
13 print(bric & bri)             # 求交集
14 print(bric | bri)             # 求并集(无序)

 

关于序列、引用、字符串的常用方法:

1. 序列

序列的三种形态:列表、元组、字符串

序列的主要功能:

  • 资格测试(也就是in与not in表达式)
  • 索引操作

 下面主要讲解切片操作:

可以使用同样的的方式,访问列表、元组、字符串
1
shoppinglist = [apple, orange, banana, pear] 2 name = abcdefg 3 4 # 索引或下标操作 5 print(shoppinglist[0]) # apple 6 print(shoppinglist[1]) # orange 7 print(shoppinglist[2]) # banana 8 print(shoppinglist[3]) # pear 9 print(name[0]) # a 10 11 print(shoppinglist[-1]) # pear 索引也可以使用负数,位置计数从末尾开始 12 print(shoppinglist[-2]) # banana 13 print(shoppinglist[-4]) # apple 14 print(name[-1]) # g 15 16 # 切片操作 17 print(shoppinglist[1:3]) # [‘orange‘, ‘banana‘] 序列切片包括起始位置,不包括结束位置 18 print(shoppinglist[2:]) # [‘banana‘, ‘pear‘] 19 print(shoppinglist[:3]) # [‘apple‘, ‘orange‘, ‘banana‘] 20 print(shoppinglist[1:-1]) # [‘orange‘, ‘banana‘] 21 print(shoppinglist[:]) # [‘apple‘, ‘orange‘, ‘banana‘, ‘pear‘] 22 print(name[1:3]) # bc 23 24 # 切片步长(默认为1) 25 print(shoppinglist[::1]) # [‘apple‘, ‘orange‘, ‘banana‘, ‘pear‘] 26 print(shoppinglist[::2]) # [‘apple‘, ‘banana‘] 步长为2时,得到0,2,4元素 27 print(shoppinglist[::3]) # [‘apple‘, ‘pear‘] 步长为3时,得到0,3元素 28 print(shoppinglist[::-1]) # [‘pear‘, ‘banana‘, ‘orange‘, ‘apple‘] 29 print(shoppinglist[::-2]) # [‘pear‘, ‘orange‘] 30 print(shoppinglist[0:3:2]) # [‘apple‘, ‘banana‘]

 

2. 引用

 如果你希望创建一个复杂对象(如:序列)的副本,必须使用切片操作。

直接赋值,指同一个对象
1
shoppinglist = [apple, orange, banana] 2 3 mylist = shoppinglist # mylist只是shoppinglist的别名,它们指的是同一个对象 4 5 print(shoppinglist) # [‘apple‘, ‘orange‘, ‘banana‘] 6 print(mylist) # [‘apple‘, ‘orange‘, ‘banana‘] 7 8 mylist.remove(mylist[0]) # 移除mylist中的第一个元素 9 10 print(shoppinglist) # [‘orange‘, ‘banana‘] (shoppinglist同时也少一个元素) 11 print(mylist) # [‘orange‘, ‘banana‘]
切片赋值,指向不同对象
1
shoppinglist = [apple, orange, banana] 2 3 mylist = shoppinglist[:] # 通过生成一份完整的切片,制作一份列表的副本,它们指的不是同一个对象 4 5 print(shoppinglist) # [‘apple‘, ‘orange‘, ‘banana‘] 6 print(mylist) # [‘apple‘, ‘orange‘, ‘banana‘] 7 8 mylist.remove(mylist[0]) # 移除mylist中的第一个元素 9 10 print(shoppinglist) # [‘apple‘, ‘orange‘, ‘banana‘] (shoppinglist并无变化) 11 print(mylist) # [‘orange‘, ‘banana‘]
简单对象可以直接赋值,指向不同对象
1
a = 5 2 b = a # 指向不同对象 3 4 print(a) # 5 5 print(b) # 5 6 7 b = 3 8 9 print(a) # 5 10 print(b) # 3

 

3. 字符串的常用方法

 字符串都是str类下的对象,有自己的方法,可以检查字符串中的一部分或是去掉空格等很多事情

 1 mystring = method
 2 
 3 if mystring.startswith(me):   # start()方法,查找字符串是否以指定内容开头
 4     print(ok)
 5 
 6 if mystring.find(th) != -1:   # find()方法,查找子字符串。找到返回2,找不到返回-1
 7     print(ok)
 8 
 9 if t in mystring:             # in 运算符,检查给定的字符串是否是查询字符串中的一部分
10     print(ok)
11 
12 delimeter = _
13 mylist = [apple, orange, banana]
14 print(delimeter.join(mylist))     # join() 方法,连接序列中的元素 apple_orange_banana
15 print(delimeter.join(mystring))   # m_e_t_h_o_d

 

以上是关于python - 数据结构的主要内容,如果未能解决你的问题,请参考以下文章

python 有用的Python代码片段

Python 向 Postman 请求代码片段

python [代码片段]一些有趣的代码#sort

使用 Python 代码片段编写 LaTeX 文档

python 机器学习有用的代码片段

python 代码片段和解决方案