Python3 String

String

在 C/C++ 等语言中,有字符与字符串两种数据类型,但是在 Python 中统一当作字符串处理,即字符就是只含有一个元素的字符串。
我们可以使用单引号或者双引号来创建字符串

1. 不可变数据类型

String 属于不可变数据类型,即我们无法对字符串进行修改:

>>> s = "hello python"
>>> s[0] = "H"

TypeError Traceback (most recent call last)
<ipython-input-25-fddebcffc74c> in <module>
      1 s = "hello python"
----> 2 s[0] = "H"
TypeError: 'str' object does not support item assignment

虽然不可以修改,但是我们可以通过方括号访问子串以及截取字符串。(这一特点与Python中另外两种序列类型List、Tuple相同)

(1)访问某一个字符:
>>> s = "hello python"
>>> print(s[6])
p
(2)截取子串:
>>> s = "hello python"
>>> print(s[:4])
hell
>>> print(s)
hello python
2. 转义字符

当我们在字符串中需要使用特殊字符时,Python 用反斜杠( \ )转义字符
例如:

>>> s = "hello\npython"
>>> print(s)
hello
python

例子中的 \n 代表换行符,在此我仅列举几个常用转义字符:
(1)\n 换行
(2)\t 横向制表符
(3)\r 回车
(4)\\ 反斜杠符号

如果想让字符串原样输出,可以使用 r :

>>> s = r"hello\npython"
>>> print(s)
hello\npython

另一种情况,如果我们想让字符串多行显示,但是用转义字符 \n 又太麻烦,不用担心,Python 对多行字符串也有支持,Python三引号允许一个字符串跨多行,并且字符串中可以包含换行符、制表符以及其他特殊字符。

>>> s = """hello
>>>     python""" #此处python前使用了一个横向制表符
>>> print(s)
hello
    python
3. 字符串格式化

熟悉 C 语言的同学可能知道,C 语言中通过 % 格式化输出字符串,Python 中同样提供了这一基本用法。但是由于Python2.6 开始,新增了一种格式化字符串的函数 str.format(),它增强了字符串格式化的功能。因此我们跳过 % 格式化字符串的方法,直接来讲解 str.format()

(1) str.format

话不多说,我们先看一个例子:

>>> "{} {}".format("hello", "python")
'hello python'
>>> "{0} {1}".format("hello", "python")
'hello python'
>>> "{1} {0}".format("hello", "python")
'python hello'
>>> "{0} {0} {1}".format("hello", "python")
'hello hello python'

细心的你一定发现了,原来 {} 中的数字对应着传入 format() 中的参数的位置

此外,我们还可以以不同的方式传入参数:

>>> print("博客名:{name}, 地址 {url}".format(name="飞翔的红猪", url="https://blog.csdn.net/WangWeb1998"))
博客名:飞翔的红猪, 地址 https://blog.csdn.net/WangWeb1998

# 通过字典设置参数
>>> site = {"name": "飞翔的红猪", "url": "https://blog.csdn.net/WangWeb1998"}
>>> print("博客名:{name}, 地址 {url}".format(**site))
博客名:飞翔的红猪, 地址 https://blog.csdn.net/WangWeb1998

# 通过列表索引设置参数
>>> my_list = ['飞翔的红猪', 'https://blog.csdn.net/WangWeb1998']
>>> print("网站名:{0[0]}, 地址 {0[1]}".format(my_list))
博客名:飞翔的红猪, 地址 https://blog.csdn.net/WangWeb1998

# 还可以传入对象
>>> class AssignValue(object):
>>>     def __init__(self, name, url):
>>>         self.name = name
>>>         self.url = url
>>> my_value = AssignValue("飞翔的红猪", "https://blog.csdn.net/WangWeb1998")
>>> print("博客名:{0.name}, 地址 {0.url}".format(my_value))
博客名:飞翔的红猪, 地址 https://blog.csdn.net/WangWeb1998

当然了,还有最最常用的格式化呢?

别着急,首先我们来介绍一下str.format() 中最基本的两个符号 {}、:

如果你仔细观察了上面的例子,你一定已经明白了,大括号就相当于我们要输出的字符串中的一个占位符,其中的第一个数字就代表着我们传入的参数的索引,例如 {0} 就代表着我们想要将传入format中的第一个参数放在这个大括号里。

当然了,仅仅将参数放到对应的位置远远达不到我们的要求,通常我们想要做的是将参数格式化显示出来,什么叫格式化呢?限定宽度,左右居中对齐,限定小数点后的位数等等。这个时候,我们的 :冒号就要出场了!同样,直接上例子:

>>> print("{0},{1}".format("hello", "python"))
hello,python
>>> print("{0:10s},{1}".format("hello", "python"))
hello     ,python
>>> print("{0},{1:x>10s}".format("hello", "python"))
hello,xxxxpython

如果你是第一次接触 str.format 你可能已经被这个例子整懵了,但是,想必顽强的你也注意到了一点:似乎加了冒号的位置参数输出格式不一样了?恭喜你,答对了!

我们可以这样来理解,{} 告诉计算机我这个位置将来要传入参数,而 : 则告诉计算机我要控制这个参数的输出格式!

接下来,我尽量为大家总结一个万能公式

1. 当传入的参数是字符串时:{<index>:<completion><alignment><width>s}

<index> 已经介绍过,代表着对应的参数的位置索引
之后我们先暂且跳过<completion>
<alignment>此处取值有3种 > < ^,分别代表右对齐,左对齐以及居中
<width>代表着输出宽度,好了,我们来看个例子:

>>> print("{0:>15s},{1}".format("hello", "python"))
          hello,python
>>> print("{0:<15s},{1}".format("hello", "python"))
hello          ,python
>>> print("{0:^15s},{1}".format("hello", "python"))
     hello     ,python

看完这个,相信你一定已经理解了<alignment><width>的意义,那么<completion>对你来说也不成问题了:

>>> print("{0:A^15s},{1}".format("hello", "python"))
AAAAAhelloAAAAA,python

没错,<completion>就是指补全字符!

最后,{} 中的 s 想必不必过多地解释了,s 代表着此处参数类型是字符串,此外 d 代表整数,f 代表浮点数

讲到这里,字符串常用的格式化输出方式就讲解完毕了,接下来我们看一下数字格式化输出

2. 当传入的参数是数字时:
{ <index>:<completion><alignment> <sign> <width>\ <.precision | only in f> [d/f] }

<index> <completion> <alignment> <width> 与在字符串中的含义相同,不再赘述

<sign> 代表是否输出正负号,当取值为 + 时,表示输出数字的正负号

>>> print("{0:x>+10d},{1:+d}".format(-46, 12))
xxxxxxx-46,+12

<.precision | only in f> 表示当数字类型为 float 时,我们可以通过这个选项来控制小数点后的位数

>>> print("{0:<+15.2f},{1:.3f}".format(-32.6844, 12.1))
-32.68         ,12.100

此外我们可以使用大括号 {} 来转义大括号,如下实例:

>>> print ("{} 对应的位置是 {{0}}".format("python"))
python 对应的位置是 {0}

如果你坚持看到了这里,那么恭喜你,你已经掌握了 str.format() 格式化输出的基本用法,之后只需要多多实践加深理解就可以了。

4. 字符串常用内建函数
1. 字符串查找

(1) find(str, beg=0, end=len(string))
检测 str 是否包含在字符串中,如果指定范围 beg 和 end ,则检查是否包含在指定范围内,如果包含返回开始的索引值,否则返回-1
(2) rfind(str, beg=0,end=len(string))
类似于 find()函数,不过是从右边开始查找.

(3) index(str, beg=0, end=len(string))
跟find()方法一样,只不过如果str不在字符串中会报一个异常.
(4) rindex( str, beg=0, end=len(string))
类似于 index(),不过是从右边开始.

(5) endswith(suffix, beg=0, end=len(string))
检查字符串是否以 obj 结束,如果beg 或者 end 指定则检查指定的范围内是否以 obj 结束,如果是,返回 True,否则返回 False.
(6) startswith(substr, beg=0,end=len(string))
检查字符串是否是以指定子字符串 substr 开头,是则返回 True,否则返回 False。如果beg 和 end 指定值,则在指定范围内检查。

(7) count(str, beg= 0,end=len(string))
返回 str 在 string 里面出现的次数,如果 beg 或者 end 指定则返回指定范围内 str 出现的次数
(8) max(str)
返回字符串 str 中最大的字母。
(9) min(str)
返回字符串 str 中最小的字母。
(10) len(string)
返回字符串长度

2. 字符串处理

(1) join(seq)
以指定字符串作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串
(2) str.split(str="", num=string.count(str))
以 str 为分隔符截取字符串,如果 num 有指定值,则仅截取 num+1 个子字符串

(3) lower()
转换字符串中所有大写字符为小写.
(4) upper()
转换字符串中的小写字母为大写
(5) swapcase()
将字符串中大写转换为小写,小写转换为大写

(6) capitalize()
将字符串的第一个字符转换为大写

(7) lstrip()
截掉字符串左边的空格或指定字符。
(8) rstrip()
删除字符串字符串末尾的空格.
(9) strip([chars])
在字符串上执行 lstrip()和 rstrip()

(10) replace(old, new [, max])
replace() 方法把字符串中的 old(旧字符串) 替换成 new(新字符串),如果指定第三个参数max,则替换不超过 max 次。

3. 字符串判别

(1) isalnum()
如果字符串至少有一个字符并且所有字符都是字母或数字则返 回 True,否则返回 False
(2) isalpha()
如果字符串至少有一个字符并且所有字符都是字母则返回 True, 否则返回 False

(3) isdigit()
如果字符串只包含数字则返回 True 否则返回 False
(4) isnumeric()
如果字符串中只包含数字字符,则返回 True,否则返回 False
这两个函数乍一看好像完全是一个作用,为了展示它俩的区别,我们来看一个例子:

>>> a = "152649"
>>> b = "一二三四五"
>>> print(a.isdigit())
>>> print(b.isdigit())
>>> print(a.isnumeric())
>>> print(b.isnumeric())
True
False
True
True

想必你已经猜到了,isnumeric() 函数中的数字字符代表的含义更广,可以是: Unicode 数字,全角数字(双字节),罗马数字,汉字数字。

(5) islower()
如果字符串中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回 True,否则返回 False
(6) isupper()
如果字符串中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回 True,否则返回 False

4. 字符串编码、解码

(1) encode(encoding=‘UTF-8’,errors=‘strict’)
以 encoding 指定的编码格式编码字符串,如果出错默认报一个ValueError 的异常,除非 errors 指定的是’ignore’或者’replace’
(2) bytes.decode(encoding=“utf-8”, errors=“strict”)
Python3 中没有 decode 方法,但我们可以使用 bytes 对象的 decode() 方法来解码给定的 bytes 对象,这个 bytes 对象可以由 str.encode() 来编码返回。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

飞翔的红猪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值