第三章 - 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)

最后

本文的另外链接是:https://herodanny.github.io/python-magedu-2018-notes5.html

Python全栈-magedu-2018-笔记5的更多相关文章

  1. 自学Python全栈开发第一次笔记

           我已经跟着视频自学好几天Python全栈开发了,今天决定听老师的,开始写blog,听说大神都回来写blog来记录自己的成长. 我特别认真的跟着这个视频来学习,(他们开课前的保证书,我也写 ...

  2. Python全栈之jQuery笔记

    jQuery runnoob网址: http://www.runoob.com/jquery/jquery-tutorial.html jQuery API手册: http://www.runoob. ...

  3. python全栈开发之OS模块的总结

    OS模块 1. os.name()      获取当前的系统 2.os.getcwd      #获取当前的工作目录 import os cwd=os.getcwd() # dir=os.listdi ...

  4. python全栈开发中级班全程笔记(第二模块、第四章(三、re 正则表达式))

    python全栈开发笔记第二模块   第四章 :常用模块(第三部分) 一.正则表达式的作用与方法 正则表达式是什么呢?一个问题带来正则表达式的重要性和作用      有一个需求 : 从文件中读取所有联 ...

  5. python全栈开发中级班全程笔记(第二模块、第四章)(常用模块导入)

    python全栈开发笔记第二模块 第四章 :常用模块(第二部分)     一.os 模块的 详解 1.os.getcwd()    :得到当前工作目录,即当前python解释器所在目录路径 impor ...

  6. python全栈开发中级班全程笔记(第二模块、第三章)(员工信息增删改查作业讲解)

    python全栈开发中级班全程笔记 第三章:员工信息增删改查作业代码 作业要求: 员工增删改查表用代码实现一个简单的员工信息增删改查表需求: 1.支持模糊查询,(1.find name ,age fo ...

  7. 老男孩Python全栈第2期+课件笔记【高清完整92天整套视频教程】

    点击了解更多Python课程>>> 老男孩Python全栈第2期+课件笔记[高清完整92天整套视频教程] 课程目录 ├─day01-python 全栈开发-基础篇 │ 01 pyth ...

  8. 老男孩最新Python全栈开发视频教程(92天全)重点内容梳理笔记 看完就是全栈开发工程师

    为什么要写这个系列博客呢? 说来讽刺,91年生人的我,同龄人大多有一份事业,或者有一个家庭了.而我,念了次985大学,年少轻狂,在大学期间迷信创业,觉得大学里的许多课程如同吃翔一样学了几乎一辈子都用不 ...

  9. 学习笔记之Python全栈开发/人工智能公开课_腾讯课堂

    Python全栈开发/人工智能公开课_腾讯课堂 https://ke.qq.com/course/190378 https://github.com/haoran119/ke.qq.com.pytho ...

  10. python 全栈开发之路 day1

    python 全栈开发之路 day1   本节内容 计算机发展介绍 计算机硬件组成 计算机基本原理 计算机 计算机(computer)俗称电脑,是一种用于高速计算的电子计算机器,可以进行数值计算,又可 ...

随机推荐

  1. iPhone8再MacOS上修改手机铃声

    1 选择下载好的mp3铃声文件,导入到itunes 2 将音乐改成AAA模式, 设置你的铃声时长 3 show in finder 找到文件,将mpr后缀修改成m4r,并删除掉mp3文件,将m4r文件 ...

  2. tp5入门

    runtime目录里的文件是临时文件,可随时删除 在tp5里,命名空间对应了文件的所在目录,app命名空间通常代表了文件的起始目录为application,而think命名空间则代表了文件的起始目录为 ...

  3. Python 概念小屋

     Python 中的 if __name__ == '__main__' 该如何理解 python多进程的理解 multiprocessing Process join run      

  4. Sql 四大排名函数(ROW_NUMBER、RANK、DENSE_RANK、NTILE)简介

    排名函数是Sql Server2005新增的功能,下面简单介绍一下他们各自的用法和区别.我们新建一张Order表并添加一些初始数据方便我们查看效果. CREATE TABLE [dbo].[Order ...

  5. Ubuntu18.04更换国内源(阿里,网易,中科大,清华等源)

    1.备份 备份/etc/apt/sources.list文件 mv /etc/apt/sources.list /etc/apt/sourses.list.backup 2.新建 新建/etc/apt ...

  6. C# 微信开发-----微信会员卡(一)

    这是微信的官方文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1451025283,能看懂的朋友就请不要往下看了,我是看不懂 ...

  7. Python-Django-Ajax进阶2

    -forms组件的渲染错误信息 在模板中:<span>{{ foo.errors.0 }}</span> -forms使用bootstrap样式 widget=widgets. ...

  8. bzoj 3238

    后缀数组+单调栈的应用 首先我们研究一下这个表达式,可以发现前半部分与串的情况并没有关系,而只是跟串的长度有关,所以我们先把前半部分算出来: 于是我们只需计算出即可 那么可以发现,对于排名分别为i,j ...

  9. vs2010编译error_code

    C1083 : 现象: xxxxx.cpp clxx:fatal error C1083:无法打开源文件: “..\..\..\..\src\folder1\folder2\folder3\folde ...

  10. python的单、双、多分支流程控制

    if流程控制总结: 1.当满足条件时,执行满足条件的代码. 2.当执行完if语句内代码,程序继续往下执行. 单分支: if 条件成立,执行满足条件的代码 如下: if a>50: print(' ...