四、Python的数据结构

一、Python的字符串

Python本身作为一个擅长数据处理、文本处理的语言,开发中需要大量的处理字符串字符串可以从前端用户输入日志文件读取数据库查询网络爬取,然后进行各种处理变换和利用

Python的字符串
类型:str

  • 知识点1:单引号、双引号、三引号
    字符串可以使用单引号、双引号、三引号包括起来的内容
    单引号和双引号都可以包含字符串
    "hello"和'hello'是一样的
    单引号中可以直接放双引号,不用转义
    'hello "python" world'
    双引号中可以直接放单引号,不用转义
    "hello 'python' world"
    单引号中放单引号,需要用\转义
    'hello \'python\'world'
    双引号中放双引号,需要用\转义
    "hello \"python" world"
    三个双引号,或者三个单引号,可以包含多行数据,并且里面可以随便包含双引号和单引号
sql = """
select * 
from table
where name like '%li%'
order by id desc
"""

print(sql)
  • 知识点2:获取子串

使用数字下标,可以直接访问某个字符,“abc”[0] == “a”

数字下标可以从-1开始,代表从字符串最后开始数,“abc”[-1] == “c”

可以使用切片,获取子字符串

str[2:4],获取2~4的子字符串,包括第2个元素,不包括第4个元素

str[:4],获取从开头0到第4个元素(不包括)的子串,“2018-09-24”[:4]

str[4:],获取从第4个元素(包括)开始,到最后的子字符串

  • 知识点3:字符串的格式化

当将数据返回给客户端、写出到文件、存入到数据库的时候
经常需要对外输出一个字符串,这个字符串是很多个变量和字符串的拼接格式化

方法1:用加号拼接字符串和字符串,“hello” + s

方法2:使用百分号格式化符号,“buy %s, count %d, price %f.”%(“apple”, 10, 99.9)

方法3:使用format函数,"{vara} and {varb}".format(vara=“liming”, varb=“xiaomei”)

方法4:使用py3.6新的format方法,f"buy {name}, count is {count}"

方法5:使用join函数,"\t".join([‘a’,‘b’,‘c’])

  • 知识点4:字符串的常用方法

字符串支持的常用方法列表

len(“abc”) 字符串的长度

str(12), str(1.2), str([1,2,3]把对象变成字符串

str.endswith(".txt"),判断是否已某个字符串结尾

str.startswith(“test_”),判断是否以某个字符串开头

str.replace(old, new),将旧字符串替换为新字符串

str.split(","),使用字符串分割字符串得到一个list

str.strip(),去除字符串两边的空格

str.isnumeric(),判断字符串是不是数字

二、Python的列表list

Python的列表list是一种保存有序项集合、可变的数据结构(可以增加和删除项)

创建一个空列表:data = []

创建一个有值列表:data = [1,2,3,4]

Python的列表
类型:list

  • 知识点1:列表的索引和切片

    索引:list[idx],访问某个元素,idx>=0 and idx <= len(list)-1

    索引: idx可以是负数,从-1往前数

    切片:list[begin:end],获取切片List,从begin开始,到end结束(不包括end)

    索引和切片对应的值都是可以修改的(字符串不可以)

  • 知识点2:列表的常用方法

    list.append(item),在列表末尾新增一个元素

    list.extend(list),在列表末尾新增一个列表

    list + list,返回一个新的List合并的list

    list.clear(),清空列表中的所有元素

    len(list),返回列表的元素个数

    for i in list: print(i),按顺序遍历列表

    for idx,value in enumerate(list): print(idx, value),用下标和数值遍历列表

    for idx in range(len(list)): print(idx, list[idx]) ,用下标和数值遍历列表

    list.sort(key=None, reverse=False),对list进行排序

    list.reverse(),翻转list自身

  • 知识点3:方便的列表推导式

    列表推导式(又称列表解析式)提供了一种简明扼要的方法来创建列表。

         squares = [  x*x   for x in list   if x%2==0   ]

在这里插入图片描述

例子:问题:计算10以内的所有偶数的平方,存入一个列表
如果不用列表推导式:

squares = []
for x in range(10):
    if x%2 == 0:
        squares.append(x*x)

如果使用列表推导式:

squares = [x*x for x in range(10) if x %2 == 0]

实际例子1:将文件每一行的第一列放到一个列表

ids = [line.strip().split("\t")[0] for line in fin if len(line.strip())>0]

实际例子2:怎样使用str.join函数处理List

datas = [1,2,3,4,5]
print("\t".join([str(x) for x in datas]))

三、Python的元组tuple

元组tuple
一种类似列表的数据序列类型

不可变,不可以添加、删除、更新元素

用两个小括号包括,元素之间用逗号分隔

索引和切片:

元组和列表一样支持索引和切片,但是不能更改元素
#得到单个元素
tup[idx]

得到切片,类型也是元组

tup[begin:end]

给元素赋值将会报错

student[0] = 1002 会报错
创建方式:
student = (1001, ‘xiaoming’, 20)

元组的括号可以省略:

tup = “a”, “b”, “c”, “d”

创建空元组和单个元素元组的方式:

tup = ()
tup = (50,)

元组支持的方法:

len(tup),得到元素个数

tup1+tup2,合并两个元组,得到一个新的元组

e in tup,判断元素是否在元组中

for x in tup: print(x),用for循环遍历元组

tuple(list),把一个列表变成元组

x,y,z=tuple,将tuple的元素挨个拆包赋值给x,y,z

Python的元组和列表的区别

区别项元组tuple列表list说明
内容区别异质、不同类型同质,相同类型用一个元组表示一个人的信息people(id、name、age) 用一个列表表示很多人的信息列表[p1,p2,p3]
使用区别pack和unpack循环遍历元组pack和unpack:编写函数pack:get_info(): return id,name,age 调用函unpack:id,name,age = get_info() 列表循环遍历:for s in students: print(s)
是否可变不可变可变元组的不可变性质:代码更安全,如果是一个元组就放心的使用,不怕被更改 有些场景需要不可变的列表,比如字典的KEY要求不可变对象

四、Python的字典dict – 基础语法

字典dict

字典dict是一种KEY:VALUE的数据结构,可以根据KEY设置和获取对应的VALUE
语法: dict = {key1:value1, key2:value2}
举例: d = {“id”:123, “name”:“liming”}

字典dict和列表list的对比

列表用顺序数字做索引,字典用Key做索引,相当于给每个元素进行了命名("3号学生"和"xm同学"的区别)
如果有一个数据列表:[(11, A), (12, B), (13, C)],要在其中查找B这个条目,需要遍历列表查找;
如果使用字典{A:11, B:12, C:13},直接使用get(B)取出,字典具有超级快的按KEY查找速度;

创建方式:
d = {“id”:123, “name”:“liming”, “age”:20}
创建空列表:d = {}

获取数据:
print(d[“id”], d[“name”])
如果key不存在就报错,比如d[“xx”]报错

新增修改数据:
d[“id”] = 456
如果"id"这个key不存在,就新增一个键值对
如果"id"这个key已经存在,就修改"id"对应的值
知识:
字典的KEY一定不会重复的
字典的Key要求不可变,可用数字、字符串、元组,不能是可变的列表

Python的字典dict – 常用方法

字典的常用方法:

len(dict) 字典的key/value对个数,也等于key的个数

str(dict) 字典的字符串形式

type(dict) 字典的类型,输出dict

dict.clear() 清空字典的所有内容

dict.get(key, default) 获取key的内容,如果key不存在,返回默认值default

key in dict 判断key是否在dict的键中

dict1.update(dict2) 将dict2的所有键值对,更新到dict1

{x:x*x for x in range(10)} 字典推导式

以下三个方法常常用于字典的遍历:

dict.items() 以列表返回可遍历的(键, 值) 元组数组,常常用于for遍历

dict.keys() 以列表返回字典所有的键

dict.values() 以列表返回字典的所有的值
在这里插入图片描述

五、Python的集合set

集合set:
集合set是一组无序并且没有重复元素的KEY集合
set跟dict的key类似,区别在于set没有value
KEY无序,所以set不支持数字索引和切片(dict也不支持)

使用场景:
使用场景1:判断某个元素是否在集合set中(set比list速度快);
使用场景2:消除输入数据的重复元素;

创建方式:
创建一个空集合:s = set()
创建一个初始化集合方法1:s = {1,2,2,3}
创建一个初始化集合方法2:s = set([1,2,2,3])
这里的参数可以是列表、元组、字符串
创建空集合不能用s = {},因为这创建了dict字典

注意:

和dict一样,set的key只能是数字、字符串、元组等不可变对象,不能是列表等可变对象

set支持的方法:

len(set) 集合的元素个数
for x in set 集合的遍历
set.add(key) 新增一个KEY,如果有重复会自动去重
set.remove(key) 删除一个KEY
set.clear() 清空set
x in set 判断元素是否在set集合中
s1 & s2或者s1.intersection(s2) 求两个集合的交集
s1 | s2或者s1.union(s2) 求两个集合的并集
s1 - s2或者s1.difference(s2) 求两个集合的差集
s1.update(s2) 将s2的所有key更新到s1,会去除重复
集合推导式:s = {x for x in ‘abcd’ if x not in ‘bc’}
在这里插入图片描述

Python高级数据结构的对比

类型可变序列有序常量举例基本运算符和函数常用方法主要特性场景
字符串str‘abc’ “abc” “”“abc”"" ‘’'abc"""in + [] [:]len() str() int() float()replacesplit strip format join索引、切片文本表示
列表list[] [1,2,3]in + [] [:] len()append extend sort索引、切片同类对象集合
元组tuple() (1,)(1,2,3)in + [] [:] len()tuple(list)索引、切片不同类型属性打包和拆包
字典dict{} {“a”:1,“b”:2}in [] len()get update items values keys无序 按KEY查找VALUE快速按KEY查找VALUE
集合setset() {1,2,3}in len() & | -add,remove update无序 不会重复去除重复 快速查找KEY
文件fileopen(path) open(path,“w”)read write close持久化程序输入获取 程序输出保存
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值