一、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 |
集合set | 是 | 否 | set() {1,2,3} | in len() & | - | add,remove update | 无序 不会重复 | 去除重复 快速查找KEY |
文件file | 否 | 是 | open(path) open(path,“w”) | read write close | 持久化 | 程序输入获取 程序输出保存 |