第三章 - 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. poj100纪念

  2. MySQL入门(参考官网)

    目录 一.登陆和退出 1. 远程主机 2. 登陆本机 3. 退出mysql 二.输入查询 三.创建和使用数据库 3.1 创建和选择数据库 3.2 创建表 3.3 将数据加载到表中 3.4 操作表格 3 ...

  3. JSP起源

    JSP起源: 在很多动态网页中,绝大部分内容都是固定不变的,只有局部内容需要动态产生和改变. 如果使用Servlet程序来输出只有局部内容需要动态改变的网页,其中所有的静态内容也需要程序员用Java程 ...

  4. mysql 分库分表 ~ ShardingSphere生态圈

    一  简介   Apache ShardingSphere是一款开源的分布式数据库中间件组成的生态圈二 成员包含   Sharding-JDBC是一款轻量级的Java框架,在JDBC层提供上述核心功能 ...

  5. Innodb和Myisam数据恢复

    (转自)https://www.cnblogs.com/DwyaneTalk/p/4113829.html 背景 这次恢复oracle和sqlserver,想想也不能把mysql落下了吧.三剑合一.都 ...

  6. 转 -Filebeat + Redis 管理 LOG日志实践

    Filebeat + Redis 管理 LOG日志实践 小赵营 关注 2019.01.06 17:52* 字数 1648 阅读 24评论 0喜欢 2 引用 转载 请注明出处 某早上,领导怒吼声远远传来 ...

  7. POI导出数据以Excel的方式录入,下载

    简单描述:把数据导出到excel文件中.过程:获取要导出的数据列表(list),创建excel文件,数据放入. 代码: //html代码 <div class="btn-group&q ...

  8. jsp 安全

    一.  身份验证和授权 认证是检验某人真正是他/她自称的那个人的过 程.在一个Servlet/JSP应用程序中,身份验证一般通过 检查用户名密码是否正确.授权是检查该级别的用户是 否具备访问权限.它适 ...

  9. sqlserver(查看被锁进程)

    -- ###### 查看被锁进程 ###### select 标志, 进程ID=spid,线程ID=kpid,块进程ID=blocked,数据库ID=dbid, 数据库名=db_name(dbid), ...

  10. Java泛型用法总结

    普通泛型 class Point< T>{ // 此处可以随便写标识符号,T是type的简称 private T var ; // var的类型由T指定,即:由外部指定 public T ...