2.5 字符串

--- 字符串是不可变的。

  1. >>> str = "Hello world!"
  2. >>> str[-6:-1] = "python"
  3. Traceback (most recent call last):
  4. File "<stdin>", line 1, in <module>
  5. TypeError: 'str' object does not support item assignment
  6. >>>

2.5.1 字符串格式设置

--- 使用字符串方法format,字段名({}部分)可以留空自动编号,或者使用索引手动编号,或者使用变量。(还可以通过:号后面添加格式说明符)

  1. >>> "H{}llo worl{}!".format('e', 'd')
  2. 'Hello world!'
  3. >>> "H{0}llo worl{1}!".format('e', 'd')
  4. 'Hello world!'
  5. >>> "H{1}llo worl{0}!".format('d', 'e')
  6. 'Hello world!'
  7. >>> "H{a}llo worl{b}!".format(b = 'd', a = 'e')
  8. 'Hello world!'
  9. >>> "H{a}llo worl{b:.3f}!".format(b = 1.2345, a = 'e')
  10. 'Hello worl1.234!'
  11. >>>

--- 使用字符串方法format,字段名可以自动编号和变量一起使用,也可以手动编号和变量一起使用,但不能自动编号和手动编号一起使用。

  1. >>> "H{1}l{a}o wo{b}l{0}!".format('d', 'e', a = 'l', b = 'r')
  2. 'Hello world!'
  3. >>> "H{}l{a}o wo{b}l{}!".format('e', 'd', a = 'l', b = 'r')
  4. 'Hello world!'
  5. >>> "H{}l{2}o wo{3}l{}!".format('e', 'd', 'l', 'r')
  6. Traceback (most recent call last):
  7. File "<stdin>", line 1, in <module>
  8. ValueError: cannot switch from automatic field numbering to manual field specification
  9. >>>

--- 使用字符串方法format,当变量名称与替换字段同名时,可使用f字符串(在字符串前面加 f )

  1. >>> from math import e
  2. >>> "E = {e}".format(e = e)
  3. 'E = 2.718281828459045'
  4. >>> from math import e
  5. >>> f"E = {e}"
  6. 'E = 2.718281828459045'
  7. >>>

2.5.2 基本转换

--- 转换标志:在感叹号❗后面的单字符,常见的有s、r、a分别使用str、repr、ASCII进行转换。

  1. >>> "{pi!s},{pi!r},{pi!a}".format(pi = 'π')
  2. "π,'π','\\u03c0'"
  3. >>>

--- 还可以指定要转换的值是哪种类型。

  1. >>> "The number is {num}".format(num = 42)
  2. 'The number is 42'
  3. >>> "The number is {num:f}".format(num = 42)
  4. 'The number is 42.000000'
  5. >>> "The number is {num:b}".format(num = 42)
  6. 'The number is 101010'
  7. >>>

2.5.3 宽度、精度和千位分隔符

  1. >>> "The number is {num:10}".format(num = 42)
  2. 'The number is 42'
  3. >>> "The number is {num:10}".format(num = "Hello")
  4. 'The number is Hello '
  5. >>> "The number is {num:10.5f}".format(num = 3.1415926)
  6. 'The number is 3.14159'
  7. >>> "The number is {num:,}".format(num = 3.14**15)
  8. 'The number is 28,440,990.75034137'
  9. >>>

2.6 字符串方法

2.6.1 位置对齐

--- 方法center,通过在两边填充字符(默认为空格),让字符串居中。(第一个参数指新字符串的长度,第二参数为填充字符)

  1. >>> "Hello world!".center(30)
  2. ' Hello world! '
  3. >>> "Hello world!".center(30,"*")
  4. '*********Hello world!*********'
  5. >>>

--- 方法rjust,通过在左边填充字符(默认为空格),让字符串居右

  1. >>> "Hello world!".rjust(30)
  2. ' Hello world!'
  3. >>> "Hello world!".rjust(30,"*")
  4. '******************Hello world!'
  5. >>>

--- 方法ljust,通过在右边填充字符(默认为空格),让字符串居左

  1. >>> "Hello world!".ljust(30)
  2. 'Hello world! '
  3. >>> "Hello world!".ljust(30,"*")
  4. 'Hello world!******************'
  5. >>>

2.6.2 查找和替换

--- 方法find,在字符串中查找子串,如果找到,则返回第一个找到位置的索引,如果没找到则返回 -1 。

&、 可以指定搜索的起点和终点,终点如果省略,则指搜索到末尾。起点值和终点值遵循左闭右开原则。

&、注意跟成员资格in和not in 的区别,成员资格返回的是布尔值,方法find返回的是索引值或 -1 。

  1. >>> "Hello world!".find("o")
  2. 4
  3. >>> "Hello world!".find("lo")
  4. 3
  5. >>> "Hello world!".find("ol")
  6. -1
  7. >>> "Hello world!".find("lo", 1, 10)
  8. 3
  9. >>> "Hello world!".find("!", 1, )
  10. 11
  11. >>> "lo" in "Hello world!"
  12. True
  13. >>> "ol" in "Hello world!"
  14. False
  15. >>>

--- 方法replace,将指定子串替换为另一个字符串,并返回替换后的结果。

&、如果没有找到指定的子串,则返回原字符串。

&、用于替换的字符串可以和指定的子串不等长。

  1. >>> "Hello world!".replace("lo", "@@")
  2. 'Hel@@ world!'
  3. >>> "Hello world!".replace("ol", "@@")
  4. 'Hello world!'
  5. >>> "Hello world!".replace("world", "python")
  6. 'Hello python!'
  7. >>>

--- 方法translate,和方法replace一样替换字符串的指定部分,不同的是它只能进行单字符替换。

&、使用方法translate前,必须对字符串类型str调用方法maketrans创建一个转换表

&、方法maketrans通常接受两个参数,两个长度相等的字符串,指定将第一个字符串中的每个字符对应替换为第二个字符串的字符。

&、方法maketrans还可以指定第三个参数,指定将要删除的字符串。

  1. >>> tab = str.maketrans("l", "@")
  2. >>> "Hello world!".translate(tab)
  3. 'He@@o wor@d!'
  4. >>> tab = str.maketrans("lo", "@^")
  5. >>> "Hello world!".translate(tab)
  6. 'He@@^ w^r@d!'
  7. >>> tab = str.maketrans("l", "@", " ")
  8. >>> "Hello world!".translate(tab)
  9. 'He@@owor@d!'
  10. >>> tab = str.maketrans("l", "@", "od")
  11. >>> "Hello world!".translate(tab)
  12. 'He@@ wr@!'
  13. >>>

2.6.3 大小写

--- 方法lower,返回全小写的新字符串。

  1. >>> "Hello world!".lower()
  2. 'hello world!'
  3. >>> "hello world!".lower()
  4. 'hello world!'
  5. >>>

--- 方法upper,返回全大写的新字符串。

  1. >>> "Hello world!".upper()
  2. 'HELLO WORLD!'
  3. >>>

2.6.4 连接和拆分

--- 方法join,通过指定的字符串连接合并序列中的元素,序列中的元素必须都是字符串。

&、注意和别的字符串方法调用方式的区别,对指定字符串调用方法join,并且传入一个序列值。

  1. >>> "-".join("Hello world!")
  2. 'H-e-l-l-o- -w-o-r-l-d-!'
  3. >>> "-".join(['', '', ''])
  4. '1-2-3'
  5. >>> "-".join([1, 2, 3])
  6. Traceback (most recent call last):
  7. File "<stdin>", line 1, in <module>
  8. TypeError: sequence item 0: expected str instance, int found
  9. >>>

--- 方法split,作用与方法join相反,将字符串拆分为序列。

&、如果没有指定分隔符,将默认在单个或多个连续的空白字符处进行拆分。

  1. >>> "Hello world!".split("l")
  2. ['He', '', 'o wor', 'd!']
  3. >>> "1+2+3".split("+")
  4. ['', '', '']
  5. >>> "Hello my python!".split()
  6. ['Hello', 'my', 'python!']
  7. >>>

2.6.5 空格删除

--- 方法strip,将字符串开头和末尾的空白格删除(不删除中间的空白格),并返回删除后的结果。

&、方法strip,可选带一个参数,表示字符串开头和末尾包含该参数指定的字符都删除,直到不是为止。(参数中各个字符顺序不重要,效果一样。)

  1. >>> " Hello world! ".strip()
  2. 'Hello world!'
  3. >>> " Hello world!".strip()
  4. 'Hello world!'
  5. >>> "Hello world! ".strip()
  6. 'Hello world!'
  7. >>> "Hello world!".strip("eH!l")
  8. 'o world'
  9. >>> "Hello world!".strip("leH!")
  10. 'o world'
  11. >>>

--- 方法lstrip,删除左边空白字符,也可选带入一个参数。

  1. >>> " Hello world! ".lstrip()
  2. 'Hello world! '
  3. >>> " Hello world! ".lstrip("Hle ")
  4. 'o world! '
  5. >>>

--- 方法rstrip,删除右边空白字符,也可选带入一个参数。

  1. >>> " Hello world! ".rstrip()
  2. ' Hello world!'
  3. >>> " Hello world! ".rstrip(" l!d")
  4. ' Hello wor'
  5. >>>

2.6.6 判断类方法(常用于登录认证)

--- 方法islower,判断原字符串至少有一个字母,如果所有字母都是小写,返回布尔值True,否则返回布尔值Flase 。

  1. >>> "hello world!".islower()
  2. True
  3. >>> "Hello world!".islower()
  4. False
  5. >>>

--- 方法isupper,判断原字符串至少有一个字母,如果所有字母都是大写,返回布尔值True,否则返回布尔值Flase 。

  1. >>> "HELLO WORLD!".isupper()
  2. True
  3. >>> "Hello world!".isupper()
  4. False
  5. >>>

&、注意原字符串必须至少有一个字母。

  1. >>> "!@#$%^&*!".isupper()
  2. False
  3. >>> "!@#$%^&*!".islower()
  4. False
  5. >>>

--- 方法isalpha,判断原字符串如果只包含字母,并且非空,则返回布尔值True 。

--- 方法isdecimal,判断原字符串如果只包含数字,并且非空,则返回布尔值True 。

--- 方法isalnum,判断原字符串如果只包含字母和数字,并且非空,则返回布尔值True 。

--- 方法isspace,判断原字符串如果只包含空格、制表符和换行,并且非空,则返回布尔值True 。

--- 方法istitle,判断原字符串如果只包含以大写字母开头,且后面都是小写字母的单词,并且非空,则返回布尔值True 。

--- 方法startswith,判断原字符串如果以指定的字符串开始,原字符串可以为空,则返回布尔值True 。

--- 方法endswith,判断原字符串如果以指定的字符串结束,原字符串可以为空,则返回布尔值True 。

Lesson 2-3(字符串)的更多相关文章

  1. 如何计算一个字符串表示的计算式的值?——C_递归算法实现

    在<C程序设计伴侣>的8.7.3 向main()函数传递数据这一小节中,我们介绍了如何通过main()函数的参数,向程序传递两个数据并计算其和值的简单加法计算器add.exe.这个程序,好 ...

  2. Python新手学习基础之数据类型——字符串的切片截取

    切片截取是python中字符串常见的一些操作,我们会在这篇文章里详细介绍,切片截取的作用是获取子字符或子字符串. 实际上,我们要做的就是使用索引,用冒号分隔两个索引,形式为:变量[头下标:尾下标],冒 ...

  3. NSString/NSMutable字符串——韩俊强…

    1.OC基本数据类型(简单铺垫) //   NSInteger  在64 位下相当于long,在非64位下相当于 int: //    CGFloat 在64位下相当于double  在非64位下相当 ...

  4. Python:Day06 元组、字典、字符串

    tuple(元组) 元组被称为只读列表,即数据可以被查询,但不能被修改,所以列表的切片操作同样适用于元组. 元组写在( )里,元素之间用逗号隔开. tul1 = ( ) #空元组 tul2 = (20 ...

  5. day 6 元组、字典、字符串

    本节内容 : 1,元组 2,字典 3,字符串作业 produce = [('mac', 9000), ('bicycle', 800), ('computer', 8000), ('book', 50 ...

  6. GO语言的进阶之路-Golang字符串处理以及文件操作

    GO语言的进阶之路-Golang字符串处理以及文件操作 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们都知道Golang是一门强类型的语言,相比Python在处理一些并发问题也 ...

  7. 执行字符串或注释代码段的方法(eval、exec、execfile)

    eval:计算字符串中的表达式exec:执行字符串中的语句execfile:用来执行一个文件 需注意的是,exec是一个语句,而eval()和execfile()则是内建built-in函数. 1 2 ...

  8. python学习 day3 (3月4日)---字符串

    字符串: 下标(索引) 切片[起始:终止] 步长[起始:终止:1] 或者-1 从后往前 -1 -2 -3 15个专属方法: 1-6  : 格式:大小写 , 居中(6) s.capitalize() s ...

  9. python中如何将字符串连接在一起,多倍的字符串如何输出

    说明: 在python中,如果有多个字符串,想要连接在一起,或者说想要拼接在一起该如何操作,在此记录下. 操作过程: 1.通过 + 这个加号操作符,将字符串拼接在一起 >>> &qu ...

随机推荐

  1. [题解]邮递员寄信(luoguP1629)

    题目来源:luoguP1629 题目描述 有一个邮递员要送东西,邮局在结点1.他总共要送N-1样东西,其目的地分别是2-N.由于这个城市的交通比较繁忙,因此所有的道路都是单行的,共有M条道路,通过每条 ...

  2. 【AGC030F】Permutation and Minimum DP

    题目大意 有一个长度为序列 \(a\),其中某些位置的值是 \(-1\). 你要把 \(a\) 补成一个排列. 定义 \(b_i=\min(a_{2i-1},a_{2i})\),求有多少种可能的 \( ...

  3. Linux系统扩容根目录磁盘空间的操作方法

    问题描述 系统的服务无法正常运行,查看磁盘空间,发现根目录已经满了 解决过程 1.添加磁盘空间 2.使用fdisk -l命令查看磁盘信息 3.新建磁盘分区 4.使用fdisk /dev/sda3, 创 ...

  4. Elasticsearch.Net 多层嵌套的逻辑实现

    { "query": { "bool": { "must": [ { "match_phrase": { "t ...

  5. selenium自动化测试python

    一.环境部署 1.selenium安装 pip3 install selenium 1.安装浏览器驱动 WebDriver 需要通过浏览器驱动来与浏览器交互,以下列出几种常用的浏览器驱动下载地址: C ...

  6. redis cluster简介和配置(3)

    前面我介绍了 redis sentinel,既然有了sentinel,为什么还要一个cluster呢?因为随着业务量的增加,不可避免要对redis进行扩容,扩容方式一般由2种:1. 垂直扩容 2. 水 ...

  7. DML、DDL、DCL的分别是什么

    DML.DDL.DCL的分别是什么 一直以来,分不清这三者的简称代表什么,甚至在面试中遇到可能会张冠李戴.今天特意记录一下. 一.DML(data manipulation language) 数据操 ...

  8. 2017-12-20python全栈9期第五天第二节之可变 数据类型和不可变数据类型

  9. hive字段名、注释中文显示问号

    问题如下图: 解决方法: header1的/etc/my.conf文件,在[mysqld]分组下面添加配置:character-set-server=utf8init_connect='SET NAM ...

  10. Docker实践之01-入门介绍

    目录 一.Docker概述 镜像 容器 仓库 二.安装Docker 1.在CentOS上安装Docker 2.在Ubuntu上安装Docker 3.启动docker 4.建立Docker用户组 5.测 ...