第三章 - 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(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只能是一个对象,或是一个和格式字符串占位符数目相等的元组

字符串格式化

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)

最后

python全栈构图_Python全栈-magedu-2018-笔记5相关推荐

  1. python全栈构图_Python全栈 Web(边框、盒模型、背景)

    CSS常用的属性: width height color background-color font-size font-weight text-decoration vertical-align 尺 ...

  2. python 栈实现_Python实现栈

    原博文 2017-07-17 17:28 − 栈的操作 Stack() 创建一个新的空栈 push(item) 添加一个新的元素item到栈顶 pop() 弹出栈顶元素 peek() 返回栈顶元素 i ...

  3. python个人网站开发_python 全栈开发,Day81(博客系统个人主页,文章详情页)

    一.个人主页 随笔分类 需求:查询当前站点每一个分类的名称以及对应的文章数 完成这个需求,就可以展示左侧的分类 它需要利用分组查询,那么必须要会基于双下划线的查询. 基于双下划线的查询,简单来讲,就是 ...

  4. python全栈计划_Python 全栈学习视频教程,包含了从 0-99天的全栈学习计划,估计可以学习 1024 小时。...

    今天跟大家推荐某大厂出 Pthon\Mysql\Linux 神器,据说是大厂内部大神分享的资料,不论是资料的详细程度和质量,都非常稀有! 我们知道,不论是高级开发和运维工程师,Linux 命令熟练程度 ...

  5. python自动化开发和全栈开发_python全栈开发devops运维自动化方向初到高级在线课程分享...

    适用人群 面向想要devops方向发展的全栈python运维开发工程师 课程概述 课程范围:我们的课程由浅入深包含C01到C05五个等级:包含前后端知识,覆盖培养一个合格python全栈工程师所需要的 ...

  6. 用python画路飞代码_python 全栈开发,Day105(路飞其他数据库表结构,立即结算需求)...

    考试第三部分:Django 16.  列列举你熟悉的Http协议头以及作用.(1分) Accept-Charset: 用于告诉浏览器,客户机采用的编码 Host: 客户机通过这个头告诉服务器,想访问的 ...

  7. python 全栈路线_python全栈要学什么 python全栈学习路线

    IT行业,技术要比学历.年龄.从业经验更为重要,技术水平直接决定就业薪资,想要学好python,首先要先了解精通Python语言基础.Python web开发.Python爬虫.Python数据分析这 ...

  8. 路飞学城python全栈开发_python 全栈开发,Day98(路飞学城背景,django ContentType组件,表结构讲解)...

    昨日内容回顾 1. 为什么要做前后端分离?-前后端交给不同的人来编写,职责划分明确.-API (IOS,安卓,PC,微信小程序...)-vue.js等框架编写前端时,会比之前写jQuery更简单快捷. ...

  9. python全栈工程_Python全栈工程师(编码)

    Python 入门基础 补充: 主流3操作大系统 Windows: Winxp   Win7 Win8 Win10 Unix: Solaris(SUN) IOS(Apple移动端) Mac OS Li ...

最新文章

  1. 利用memcached做缓存服务器,为后端tomcat服务器做会话保持,利用httpd的jk模块模块做负载均衡...
  2. 正经炼丹师如何完美安排国庆长假?| 假期专属论文清单
  3. Microsoft Office企业项目管理(EPM)解决方案
  4. jsp中的java部分_jsp页面的七个组成部分
  5. php date函数实现,PHP date() 函数可实现的功能列表
  6. 【ElasticSearch】Es 源码之 PersistentTasksExecutorRegistry 源码解读
  7. 【Part1】用JS写一个Blog(node + vue + mongoDB)
  8. 牛客小白月赛4 J 强迫症 思维
  9. 移动端上拉加载下拉刷新插件-mescroll.js插件
  10. java actionsupport_【JAVA学习】struts2 中 Actionsupport 的作用
  11. 10个比较不错的 JavaScript 库
  12. html下拉菜单栏代码
  13. 【单片机笔记】PWM信号与PPM信号简单理解
  14. 判断英语文章中空格,数字,各个大小写字母的个数
  15. 网站分析工具深度讲解之访问来源统计(一)
  16. 解决“bipwallet\wallet.py decoding str is not supported“问题
  17. Gatsby中怎么使用MDX?
  18. 计算机操作系统(第四版)第二章(进程的描述与控制)知识点整理
  19. 1000张动漫萌妹子次元系人物素材图,可做壁纸头像
  20. java动物声音模拟器_动物声音模拟器app|动物声音模拟器下载_v9.2.3_9ht安卓下载...

热门文章

  1. 机器学习基础(十八) —— decision stump
  2. 想学python买什么书好-看了许多python书后!我发现学好python这三本书必看
  3. python和java哪个好-现在Java和Python哪个前景更好?
  4. 为什么都建议学java而不是python-是不是Python比Java更容易学,更容易就业?
  5. python基础教程pdf-Python基础教程(第3版) PDF高清完整版免费下载|百度云盘
  6. python开发软件的实例-如何编写Python软件开发文档(7个技巧)
  7. 计算机语言的比较英文论文,科学网—撰写高质量英文科技论文的心态、布局、程序和方法 - 岳中琦的博文...
  8. win8.1计算机开启远程桌面连接不上,Win8.1电脑远程桌面无法连接提示“你的凭据不工作”怎么办...
  9. winform 往第三方传值 put
  10. java 日志时间格式_java.util.logging.Logger 使用中关于时间格式的问题