python3字符串

字符串是python中最常使用的数据类型之一,用来记录文本信息

微信公众号

目录

python 字符串表示方法 回目录

  • 单引号 '
  • 双引号 "
  • 三单引号 ‘’'
  • 三双引号 “”"
    >>> a = "Hello world!"
    >>> b = """你好!
    ... 世界!"""
    >>> print(a, b)
    Hello world! 你好!
    世界!
    >>> name = "python" '小' """demo"""
    >>> print(name)
    python小demo
    

特别说明:

  • 所有非注释内容中用引号括起来的都是字符串,如果引号内没有内容,则代表空字符串,如:‘’、“”, 空字符串在python中认为是假值(即bool(“”)返回为False)
  • 单引号内可以包含双引号,双引号内可以包含单引号,如:“It’s”、‘A is “a”’
  • 三引号内可以包含单双引号,如:“”“a is ‘b’”“”、
  • 三引号内的换行会自动转换成换行符号 “\n”
  • python中多个字符串赋值给一个变量时会形成隐式拼接, 如:name = “python” ‘小’ “”“demo”“”,在赋值时会先将python、小、demo拼成“python小demo”后在赋值给neam变量



字符串的运算 回目录

  • + 字符串拼接(除了隐式拼接,可以使用+进行字符串拼接,提高代码可读性)

    >>> name = "python" + "小" + "demo"
    >>> print(name)
    python小demo
    
  • * 重复拼接字符串

    >>> "a" * 3
    'aaa'
    >>> five_a = "a" * 5
    >>> print(five_a)
    aaaaa
    
  • += 拼接赋值

    >>> name = "python"
    >>> name += "小demo"
    >>> name
    'python小demo'
    >>> name_2 = "python"
    >>> name_2 += "小" + "demo"
    >>> name_2
    'python小demo'
    
  • *= 重复拼接赋值

    注意:等号右边必须为正整数,如果是非整数,则触发异常,如果是负整数或者是0,则会给变量赋值空字符串

    >>> a = "a"
    >>> a *= 5
    >>> a
    'aaaaa'
    >>> a *= 0
    >>> a
    ''
    >>> a = "abc"
    >>> a *= -1
    >>> a
    ''
    >>> a = "a"
    >>> a *= 3.0
    Traceback (most recent call last):
        File "<stdin>", line 1, in <module>
    TypeError: can't multiply sequence by non-int of type 'float'
    
  • in 判断给定的字符或者字符串是否在目标字符串中,如果在则返回True,否则返回False

    >>> "python" in "python小demo"
    True
    >>> "a" in "python小demo"
    False
    
  • not in 判断给定的字符或者字符串是否在目标字符串中,如果在则返回False,否则返回True

    >>> "python" not in "python小demo"
    False
    >>> "a" not in "python小demo"
    True
    



字符串的比较 回目录

python字符串跟数字类型一样,支持大小的比较,但与数据类型不一样的是,数据类型比较的是值大小,而字符串比较的是字符Unicode 编码

比较符:

       >、>=、<、<=、==、!=

>>> "a" > "b"
False
>>> "a" <= "b"
True
>>> "a" == "a"
True

字符串的编码(encode)的转换函数

  • ord© 返回一个字符Unicode的值
  • chr(i) 返回i值对应的字符

可以用这两个内置方法来看看上述例子中a、b的大小

>>> ord("a")
97
>>> ord("b")
98
>>> chr(97)
'a'

结果返回a的Unicode是97,b的Unicode是98,所以a > b

思考?

上面我们已经知道字符的大小比较,那么字符串中的大小如何比较呢?“abc” 跟 “ac” 谁比较大呢?

>>> "abc" > "ac"
False
>>> "abc" > "ab"
True

进入交互模式下,发现 “abc” 是小于 “ac” 的,这是因为字符串比较时,会从左往右开始对应比较每个字符的Unicode值,当发现有一个Unicode不相等时,根据比较符返回结果



字符串的索引 回目录

表达式: 字符串[index]

index 是字符串的下标,必须是整数类型。从左往右时,下标从0开始,如果index大于len(string) - 1 会触发异常;从右往左时,下标从-1开始,如果index 小于-len(string)会触发异常
在这里插入图片描述

>>> name = "python小demo"
>>> name[0]
'p'
>>> name[5]
'n'
>>> name[-1]
'o'
>>> name[-5]
'小'
>>> len(name)
11
>>> name[15]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: string index out of range
>>> name[-12]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: string index out of range

字符串切片 回目录

字符串截取其中一段字符组成新的字符串,遵循左闭右开的原则

表达式:字符串[start: end: step]

  • start、end、step均可省略
  • 默认step为1,step为正整数时,代表从左往右截取;step为负整数时代表从右往左截取;step不能为0
  • step为正整数时,默认start为0, end为len(string)
  • step为负整数时,默认start为-1,end为-(len(string) + 1)
  • start、end可以越界(即字符串长度限制)
>>> name = 'python小demo'
>>> name[::]
'python小demo'
>>> name[0:6]
'python'
>>> name[::-1]
'omed小nohtyp'
>>> name[::3]
'ph小m'
>>> name[-4: len(name)]
'demo'
>>> name[:1000]
'python小demo'
>>> name[-1000:5]
'pytho'

利用切片进行字符串反转

>>> a = "abc"
>>> a[::-1]
'cba'



字符串的转义 回目录

  • ’ 单引号

    >>> print('It\'s "python小demo"')
    It's "python小demo"
    
  • " 双引号

    >>> print("It's \"python小demo\"")
    It's "python小demo"
    
  • \\ 反斜杠 如:“This answer is ab\ac?”

    >>> print("This answer is ab\ac?")
    This answer is abc?
    >>> print("This answer is ab\\ac?")
    This answer is ab\ac?
    
  • \a 铃响 执行print(“\a”) 会有铃响

  • \b 退格

  • \000 空

    >>> print("a\000cd")
    acd
    
  • \n 换行

    >>> print("微信搜索公众号:python小demo\n一起学python3")
    微信搜索公众号:python小demo
    一起学python3
    
  • \v 纵向制表符; \t 横向制表符

    >>> print("a\tb\vc\td")
    a       b
    c       d
    
  • \r 返回光标至行首

  • \f 换页

raw 字符串,让转义符号失效

表达式:

  • r’字符串内容’
  • r"字符串内容"
  • r’‘‘字符串内容’’’
  • r"““字符串内容””"
>>> print(r'\a \n \t \v')
\a \n \t \v



字符串格式化输出 回目录

生成一定格式的字符串

表达式:

  • 格式化字符串 % 参值
  • 格式化字符串 % (参值1,参值2,…)
  • 字符串中的%号为占位符,参值会替换到字符的占位中
>>> "这是微信公众号:%s" % "python小demo"
'这是微信公众号:python小demo'
>>> print("1 + %d = 6 \n10 %s 5 = 5" % (5, "-"))
1 + 5 = 6
10 - 5 = 5

格式化符号:

  • %c 格式化字符及其ASCII码, ASII码会自动转成字符
    >>> "%c" % 97
    'a'
    >>> "%c" % "a"
    'a'
    >>> "%c" % "中"
    '中'
    
  • %s 格式化字符串,参值会使用str转换后替换
    >>> "%s %s %s" % (1, 1/3, "中文")
    '1 0.3333333333333333 中文'
    
  • %d 格式化整数
    >>> "整数:%d 小数:%d" % (10 , 1 / 3)
    '整数:10 小数:0'
    
  • %u 格式化无符号整型
  • %o 八进制数
  • %x 十六进制
  • %X 十六进制(大写)
  • %f 格式化浮点数,可以指定小数点后精度
    >>> "默认:%f  保留两位小数: %.2f  保留十位小数:%.10f" % (1/3, 1/3, 1/3)
    '默认:0.333333  保留两位小数: 0.33  保留十位小数:0.3333333333'
    
  • %e 、 %E 用科学计数法格式化浮点数
    >>> "%e   %E" % (1/3, 1/3)
    '3.333333e-01   3.333333E-01'
    
  • %g %f 和 %g的简写
  • %G %f 和 %G的简写
  • %p 用十六进制数格式化变量的地址

三引号字符串输出格式字符串

上面格式化字符串虽然可以达到预想效果,但用起来还是很麻烦,使用三引号可以很轻松的输出想要的字符串格式,举个例子,比如想输出下面样式的字符串:

±---------------------+

|     python小demo     |

±---------------------+

可以直接用三引号括起来就可以

>>> out_str = """
... +----------------------+
... |     python小demo     |
... +----------------------+
... """
>>> print(out_str)

+----------------------+
|     python小demo     |
+----------------------+
f-string 是python3.6+版本新功能,后面接字符串,需要传入的变量可用"{}"括起来,变量可以是python的任何数据类型
>>> name = "python小demo"
>>> study = "python"
>>> f"微信搜索公众号:{name} ,一起学{study}"
'微信搜索公众号:python小demo ,一起学python'



字符串中常用的内建函数(此处我只列举了我常用的方法) 回目录

  • str.format(*args, **kwargs) 执行字符串格式化操作(在f-string还没有之前,我更喜欢三引号配合这个输出格式化字符串)

    >>> name = "python小demo"
    >>> study = "python"
    >>> out_str = """
    ... 一起学{}
    ... 关注{}
    ... """.format(study, name)
    >>> out_str
    '\n一起学python\n关注python小demo\n'
    >>> print(out_str)
    
    一起学python
    关注python小demo
    

    "{}"内可以传入任何python数据类型

  • str.encode(encoding=‘utf-8’, errors=‘strict’) 返回对应字符集编码后的字节串对象,encoding指定字符集;errors设置错误处理方案,默认情况下不会进行检测

  • bytes.decode(encoding=“utf-8”, errors=“strict”),用来解码str.encode返回的对象

    >>> name = "python小demo"
    >>> name_utf8 = name.encode('utf-8')
    >>> name_gbk = name.encode("GBK")
    >>> print(name_utf8, "======", name_gbk)
    b'python\xe5\xb0\x8fdemo' ====== b'python\xd0\xa1demo'
    >>> print("utf8解码:", name_utf8.decode("utf-8"))
    utf8解码: python小demo
    >>> print("GBK解码:", name_gbk.decode("GBK"))
    GBK解码: python小demo
    

    编码和解码字符集必须一致,否则会出现乱码,如下:

    >>> print("utf8编码GBK解码:", name_utf8.decode("GBK"))
    utf8编码GBK解码: python灏廳emo
    
  • str.startswith(prefix[, start[, end]]) 如果字符串以指定的 prefix 开始则返回 True,否则返回 False。 如果有可选项start,将从所指定位置开始检查。 如果有可选项end,将在所指定位置停止比较

  • str.endswith(suffix[, start[, end]]) 如果字符串以指定的 suffix 结束返回 True,否则返回 False。如果有可选项 start,将从所指定位置开始检查。 如果有可选项 end,将在所指定位置停止比较

    >>> name = "python小demo"
    >>> name.startswith("py")
    True
    >>> name.startswith("python")
    True
    >>> name.startswith("n")
    False
    >>> name.startswith("n", 5)
    True
    >>> name.endswith("demo")
    True
    >>> name.endswith("demo", 1)
    True
    >>> name.endswith("demo", 1, 3)
    False
    
  • str.find(sub[, start[, end]]) 检测字符串中是否有包含的sub字符串,如果有,返回最先开始的下标,没u有则返回-1,如果有start, end,将在stat、end范围内查找

    >>> name = "python小demo"
    >>> name.find("py")
    0
    >>> name.find("o")
    4
    >>> name.find("o", 5)
    10
    >>> name.find("56", 5)
    -1
    
  • len(string) 返回字符串字符个数

    >>> len("abc")
    3
    >>> len("")
    0
    >>> len("a")
    1
    
  • str.join(iterable) 返回一个由 iterable 中的字符串拼接而成的字符串,iterable里面元素必须都是字符或者字符串类型,bytes对象都不可以

    >>> "".join(["python", "小", "demo"])
    'python小demo'
    >>> " - ".join("abc")
    'a - b - c'
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值