Python全栈-magedu-2018-笔记5
第三章 - Python 内置数据结构
字符串
- 一个个字符组成的有序的序列,是字符的集合。
- python中一个字符也是str类型。
- 使用单引号、双引号、三引号引住的字符序列
- 字符串是不可变对象
- Python3起,字符串就是Unicode类型
字符串定义 初始化
- 举例
s1 = 'string'
s2 = "string2"
s3 = '''this's a "String" '''
s4 = 'hello \n herodanny.github.io'
s5 = r"hello \n herodanny.github.io"
s6 = 'c:\windows\nt'
s7 = R"c:\windows\nt"
s8 = 'c:\windows\\nt'
sql = """select * from user where name='tom' """
字符串元素访问——下标
- 字符串支持使用索引访问
sql = "select * from user where name='tom'"
sql[4] # 字符串'c'
sql[4] = 'o'
有序的字符集合,字符序列
for c in sql:
print(c)
print(type(c)) # 什么类型?可迭代
lst = list(sql)
字符串join连接*
- "string".join(iterable) -> str
- 将可迭代对象连接起来,使用string作为分隔符
- 可迭代对象本身元素都是字符串
- 返回一个新字符串
lst = ['1','2','3']
print(""".join(lst)) # 分隔符是双引号
print(" ".join(lst))
print("\n".join(lst))
lst = ['1',['a','b'],'3'] # 复杂结构列表
print(" ".join(lst)) # TypeError: sequence item 1: expected str instance, list found
字符串+连接
- + -> str
- 将2个字符串连接在一起
- 返回一个新字符串
字符串分割
- 分割字符串的方法分为2类
- split系
- 将字符串按照分隔符分割成若干字符串,并返回列表
- partition系
- 将字符串按照分隔符分割成2段,返回这2段和分隔符的元组
- split系
字符串分割*
- split(sep=None, maxsplit=-1) -> list of strings
- 从左至右
- sep 指定分割字符串,缺省的情况下空白字符串作为分隔符
- maxsplit 指定分割的次数,-1 表示遍历整个字符串
s1 = "I'm \ta super student."
s1.split()
s1.split('s')
s1.split('super')
s1.split('super ')
s1.split(' ')
s1.split(' ',maxsplit=2)
s1.split('\t',maxsplit=2)
字符串分割
- rsplit(sep=None, maxsplit=-1) -> list of strings
- 从右向左
- sep 指定分割字符串,缺省的情况下空白字符串作为分隔符
- maxsplit 指定分割的次数,-1 表示遍历整个字符串
s1 = "I'm \ta super student."
s1.rsplit()
s1.rsplit('s')
s1.rsplit('super')
s1.rsplit('super ')
s1.rsplit(' ')
s1.rsplit(' ',maxsplit=2)
s1.rsplit('\t',maxsplit=2)
字符串分割
- splitlines([keepends]) -> list of strings
- 按照行来切分字符串
- keepends 指的是是否保留行分隔符
- 行分隔符包括\n、\r\n、\r等
'ab c\n\nde fg\rkl\r\n'.splitlines()
'ab c\n\nde fg\rkl\r\n'.splitlines(True)
s1 = '''I'm a super student.
You're a super teacher.'''
print(s1)
print(s1.splitlines())
print(s1.splitlines(True))
字符串分割*
- partition(sep) -> (head, sep, tail)
- 从左至右,遇到分隔符就把字符串分割成两部分,返回头、分隔符、尾三部分的三元组;如果没有找到分隔符,就返回头、2个空元素的三元组
- sep 分割字符串,必须指定
s1 = "I'm a super student."
s1.partition('s')
s1.partition('stu')
s1.partition('') # ValueError: empty separator
s1.partition('abc')
- rpartition(sep) -> (head, sep, tail)
- 从右至左,遇到分隔符就把字符串分割成两部分,返回头、分隔符、尾三部分的三元组;如果没有找到分隔符,就返回2个空元素和尾的三元组
字符串大小写
- upper()
- 全大写
- lower()
- 全小写
- 大小写,做判断的时候用
- swapcase()
- 交互大小写
字符串排版
- title() -> str
- 标题的每个单词都大写
- capitalize() -> str
- 首个单词大写
- center(width[, fillchar]) -> str
- width 打印宽度
- fillchar 填充的字符
- zfill(width) -> str
- width 打印宽度,居右,左边用0填充
- ljust(width[, fillchar]) -> str 左对齐
- rjust(width[, fillchar]) -> str 右对齐
- 中文用的少,了解一下
字符串修改*
- replace(old, new[, count]) -> str
- 字符串中找到匹配替换为新子串,返回新字符串
- count表示替换几次,不指定就是全部替换
'https://www.cnblogs.com'.replace('w','p')
'https://www.cnblogs.com'.replace('w','p',2)
'https://www.cnblogs.com'.replace('w','p',3)
'https://www.cnblogs.com'.replace('ww','p',2)
'https://www.cnblogs.com'.replace('www','python',2)
字符串修改*
- strip([chars]) -> str
- 从字符串两端去除指定的字符集chars中的所有字符
- 如果chars没有指定,去除两端的空白字符
s = "\r \n \t Hello Python \n \t"
s.strip()
s = " I am very very very sorry "
s.strip('Iy')
s.strip('Iy ')
- lstrip([chars]) -> str
- 从左开始
- rstrip([chars]) -> str
- 从右开始
字符串查找*
- find(sub[, start[, end]]) -> int
- 在指定的区间[start, end),从左至右,查找子串sub。找到返回索引,没找到返回-1
- rfind(sub[, start[, end]]) -> int
- 在指定的区间[start, end),从右至左,查找子串sub。找到返回索引,没找到返回-1
s = "I am very very very sorry"
s.find('very')
s.find('very', 5)
s.find('very', 6, 13)
s.rfind('very', 10)
s.rfind('very', 10, 15)
s.rfind('very',-10,-1)
字符串查找*
与 find 的区别就是抛出异常
- index(sub[, start[, end]]) -> int
- 在指定的区间[start, end),从左至右,查找子串sub。找到返回索引,没找到抛出异常ValueError
- rindex(sub[, start[, end]]) -> int
- 在指定的区间[start, end),从左至右,查找子串sub。找到返回索引,没找到抛出异常ValueError
s = "I am very very very sorry"
s.index('very')
s.index('very', 5)
s.index('very', 6, 13)
s.rindex('very', 10)
s.rindex('very', 10, 15)
s.rindex('very',-10,-1)
字符串查找
- 时间复杂度
- index和count方法都是O(n)
- 随着列表数据规模的增大,而效率下降
- len(string)
- 返回字符串的长度,即字符的个数,O(1)
字符串查找
- count(sub[, start[, end]]) -> int
- 在指定的区间[start, end),从左至右,统计子串sub出现的次数
s = "I am very very very sorry"
s.count('very')
s.count('very', 5)
s.count('very', 10, 14)
字符串判断*
- endswith(suffix[, start[, end]]) -> bool
- 在指定的区间[start, end),字符串是否是suffix结尾
- startswith(prefix[, start[, end]]) -> bool
- 在指定的区间[start, end),字符串是否是prefix开头
s = "I am very very very sorry"
s.startswith('very')
s.startswith('very', 5)
s.startswith('very', 5, 9)
s.endswith('very', 5, 9)
s.endswith('sorry', 5)
s.endswith('sorry', 5, -1)
s.endswith('sorry', 5, 100)
字符串判断 is系列
- isalnum() -> bool 是否是字母和数字组成
- isalpha() 是否是字母
- isdecimal() 是否只包含十进制数字
- isdigit() 是否全部数字(0~9)
- isidentifier() 是不是字母和下划线开头,其他都是字母、数字、下划线
- islower() 是否都是小写
- isupper() 是否全部大写
- isspace() 是否只包含空白字符
字符串格式化
- 字符串的格式化是一种拼接字符串输出样式的手段,更灵活方便
- join 拼接只能使用分隔符,且要求被拼接的是可迭代对象
- + 拼接字符串还算方便,但是非字符串需要先转换为字符串才能拼接
- 在2.5版本之前,只能使用printf style风格的print输出
printf-style formatting,来自于C语言的printf函数
- 格式要求
- 占位符:使用%和格式字符组成,例如%s、%d等
- s调用str(),r会调用repr()。所有对象都可以被这两个转换。
- 占位符中还可以插入修饰字符,例如%03d表示打印3个位置,不够前面补零
- format % values,格式字符串和被格式的值之间使用%分隔
- values只能是一个对象,或是一个和格式字符串占位符数目相等的元组
- 占位符:使用%和格式字符组成,例如%s、%d等
字符串格式化
- printf-style formatting 举例
"I am %03d" % (20,)
'I like %s.' % 'Python'
'%3.2f%% , 0x%x, 0X%02X' % (89.7654, 10, 15)
"I am %-5d" % (20,)
3 是显示的最小总宽度,2 是小数点后的位数(如果可用的话)
- 号表示左对齐,默认是有对齐.
字符串格式化***
format函数格式字符串语法——Python鼓励使用
"{} {xxx}".format(*args, **kwargs) -> str
args是位置参数,是一个元组
kwargs是关键字参数,是一个字典
花括号表示占位符
{}表示按照顺序匹配位置参数,{n}表示取位置参数索引为n的值
{xxx}表示在关键字参数中搜索名称一致的
{{}} 表示打印花括号
字符串格式化***
位置参数
"{}:{}".format('192.168.1.100',8888),这就是按照位置顺序用位置参数替换前面的格式字符串的占位符中关键字参数或命名参数
"{server} {1}:{0}".format(8888, '192.168.1.100', server='Web Server Info : ') ,位置参数按照序号匹配,关键字参数按照名词匹配访问元素
"{0[0]}.{0[1]}".format(('github','com'))对象属性访问
from collections import namedtuple
Point = namedtuple('Point','x y')
p = Point(4,5)
"{{{0.x},{0.y}}}".format(p)有了这些字符串格式化方法,字符串拼接可以丢弃了。
字符串格式化***
对齐
'{0}*{1}={2:<2}'.format(3,2,2*3)
'{0}*{1}={2:<02}'.format(3,2,2*3)
'{0}*{1}={2:>02}'.format(3,2,2*3)
'{:^30}'.format('centered')
'{:*^30}'.format('centered')进制
"int: {0:d}; hex: {0:x}; oct: {0:o}; bin: {0:b}".format(42)
"int: {0:d}; hex: {0:#x}; oct: {0:#o}; bin: {0:#b}".format(42)
octets = [192, 168, 0, 1]
'{:02X}{:02X}{:02X}{:02X}'.format(*octets)
* 是参数解构,分解为4个元素
字符串格式化***
请使用format函数格式化字符串
字符串练习
- 用户输入一个数字
- 判断是几位数
- 打印每一位数字及其重复的次数
- 依次打印每一位数字,顺序个、十、百、千、万...位
num = "" # 这里不写,下面的num也不会出错,在python作用域是能访问到的,但是不写不好
while True:
num = input("Please input a interger: ").strip()
if num.isdigit():
num = int(num) # 把前导0也删除,或 lstrip('0')
break
else:
print("Bad number.")
count [0] * 10
for i in range(10):
count[i] = num.count(str(i))
for i in range(10):
if count[i]:
print(i, count[i])
lst = list(num)
lst.reverse()
print(lst)
- 输入5个数字,打印每个数字的位数,将这些数字排序打印,要求升序打印
lst = []
for i in range(5):
m = input(">>>").strip().lstrip("0")
print("这是{}位数".format(len(m)))
lst.append(int(m))
# print(sorted(lst))
lst.sort()
print(lst)
最后
本文的另外链接是:https://herodanny.github.io/python-magedu-2018-notes5.html
Python全栈-magedu-2018-笔记5的更多相关文章
- 自学Python全栈开发第一次笔记
我已经跟着视频自学好几天Python全栈开发了,今天决定听老师的,开始写blog,听说大神都回来写blog来记录自己的成长. 我特别认真的跟着这个视频来学习,(他们开课前的保证书,我也写 ...
- Python全栈之jQuery笔记
jQuery runnoob网址: http://www.runoob.com/jquery/jquery-tutorial.html jQuery API手册: http://www.runoob. ...
- python全栈开发之OS模块的总结
OS模块 1. os.name() 获取当前的系统 2.os.getcwd #获取当前的工作目录 import os cwd=os.getcwd() # dir=os.listdi ...
- python全栈开发中级班全程笔记(第二模块、第四章(三、re 正则表达式))
python全栈开发笔记第二模块 第四章 :常用模块(第三部分) 一.正则表达式的作用与方法 正则表达式是什么呢?一个问题带来正则表达式的重要性和作用 有一个需求 : 从文件中读取所有联 ...
- python全栈开发中级班全程笔记(第二模块、第四章)(常用模块导入)
python全栈开发笔记第二模块 第四章 :常用模块(第二部分) 一.os 模块的 详解 1.os.getcwd() :得到当前工作目录,即当前python解释器所在目录路径 impor ...
- python全栈开发中级班全程笔记(第二模块、第三章)(员工信息增删改查作业讲解)
python全栈开发中级班全程笔记 第三章:员工信息增删改查作业代码 作业要求: 员工增删改查表用代码实现一个简单的员工信息增删改查表需求: 1.支持模糊查询,(1.find name ,age fo ...
- 老男孩Python全栈第2期+课件笔记【高清完整92天整套视频教程】
点击了解更多Python课程>>> 老男孩Python全栈第2期+课件笔记[高清完整92天整套视频教程] 课程目录 ├─day01-python 全栈开发-基础篇 │ 01 pyth ...
- 老男孩最新Python全栈开发视频教程(92天全)重点内容梳理笔记 看完就是全栈开发工程师
为什么要写这个系列博客呢? 说来讽刺,91年生人的我,同龄人大多有一份事业,或者有一个家庭了.而我,念了次985大学,年少轻狂,在大学期间迷信创业,觉得大学里的许多课程如同吃翔一样学了几乎一辈子都用不 ...
- 学习笔记之Python全栈开发/人工智能公开课_腾讯课堂
Python全栈开发/人工智能公开课_腾讯课堂 https://ke.qq.com/course/190378 https://github.com/haoran119/ke.qq.com.pytho ...
- python 全栈开发之路 day1
python 全栈开发之路 day1 本节内容 计算机发展介绍 计算机硬件组成 计算机基本原理 计算机 计算机(computer)俗称电脑,是一种用于高速计算的电子计算机器,可以进行数值计算,又可 ...
随机推荐
- spring cloud(学习笔记)高可用注册中心(Eureka)的实现(一)
最近在学习的时候,发现微服务架构中,假如只有一个注册中心,那这个注册中心挂了可怎么办,这样的系统,既不安全,稳定性也不好,网上和书上找了一会,发现这个spring cloud早就想到了,并帮我们解决了 ...
- Junit的基础学习
一个强大的单元测试框架: 一.组成部分: 1.注解: (1)@Test 注解: 放在测试方法上,表示这是用于测试其他方法的一个测试单元 @Test public void testSum1(){ Sy ...
- canvas图片合成中的坑
需求 要用代码来实现多张外部图片和文字的合并而且要上传到七牛云,再将图片链接通过客户端分享出去.图片背景需要支持用户自定义更换. 实现方案 在一个canvas上多次调用drawImage函数,分别绘制 ...
- blinker库
参考 Blinker Documentation Blinker 是一个基于Python的强大的信号库,它既支持简单的对象到对象通信,也支持针对多个对象进行组播.Flask的信号机制就是基于它建立的. ...
- 新闻API接口
最近很多大学生为了完成作业,或者刚开始接触android的问我要新闻APP的源码,其实就是个很小的demo,以前自己也是学着别人敲得的代码,现在自己整理了一份体积很小,代码注释非常详细的新闻APP.提 ...
- [Linux]ln -al输出内容解析
第一项的第一位是文件类型:-: 表示普通文件d: 目录b: 块特殊文件c: 字符特殊文件l: 符号链接文件p: 命名管道文件FIFOs: 套接字文件 第二项是该文件的inode的链接计数,即stat ...
- 论文阅读 | A Curriculum Domain Adaptation Approach to the Semantic Segmentation of Urban Scenes
paper链接:https://arxiv.org/pdf/1812.09953.pdf code链接:https://github.com/YangZhang4065/AdaptationSeg 摘 ...
- 修正锚点跳转位置 避免头部fixed固定部分遮挡
如下锚点标签: <div id="id1"> <span class="kkAnchor"></span> 正文正文正文正文 ...
- Tomcat 下4个配置文件详解
Tomcat 的配置文件由4个 xml 文件构成,context.xml.web.xml.server.xml.tomcat-users.xml 这4个文件.每个文件都有自己的功能与配置方法,下列将逐 ...
- 金蝶k3wise 核算项目、辅助资料
金蝶k3wise 核算项目.辅助资料 ----核算项目信息 select * from t_ItemClass ----核算项目字段信息 --锁定字段 ----核算项目内容表 select * fro ...