热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Python3.7之字符串

一、基础知识在python中,加了引号的字符均被认为是字符串。单双引号没有任何区别,但要考虑字符串内含有引号的配合情况,多行字符串必须用多引号。二、字符串常用函数1.合并字符串之j

一、基础知识

在python中,加了引号的字符均被认为是字符串。单双引号没有任何区别,但要考虑字符串内含有引号的配合情况,多行字符串必须用多引号。

二、字符串常用函数

1.合并字符串之join()与format()

join():用于将序列中的元素以指定的字符连接生成一个新的字符串。

l = ['a','a','a','a']
L1 = ''.join(l)   # output is 'aaaa'
L2 = 'b'.join(l)  # output is 'abababa'
L3 = '5'.join(l)  # output is 'a5a5a5a'

format():Python2.6 开始,新增了一种格式化字符串的函数 str.format(),它增强了字符串格式化的功能。

基本语法是通过 {}: 来代替以前的 % 。format 函数可以接受不限个参数,位置可以不按顺序。

# 形式一
print('{0}{1}{0}'.format('a', 'b'))
# 形式二,必须一一对应
print('{}{}'.format('a', 'b'))
# 形式三
print('{name}的年龄是{age}'.format(age=12, name='谢欣然'))
'''
aba
ab
谢欣然的年龄是12
'''

2. strip()与split()辨析

strip是删除的意思,而split则是分割的意思,两者功能不同。

strip():取掉字符两端字符(默认是空格,当然也可以以自定义字符放到括弧里),所以就有rstrip(),lstrip(),意思是去掉右边、去掉左边。

注意:该方法只能删除开头或是结尾的字符,不能删除中间部分的字符。

l = '222hello22222222'
l.strip('2')   # output is 'hello'
l.rstrip('2')  # output is 222hello
l.lstrip('2')  # output is hello2222222

只要头尾包含有指定字符序列中的字符就删除

str = "123abcrunoob321"
print (str.strip( '12' ))  # 字符序列为 12
'''
3abcrunoob3
'''

split():通过指定分隔符对字符串进行切片,分割成列表,如果参数 num 有指定值,则分隔 num+1 个子字符串。分隔符默认为空字符,包括空格,换行符,制表符,num默认为-1。

str = "Line1-abcdef \nLine2-abc \nLine4-abcd"
print(str.split())       # 以空格为分隔符,包含 \n
print(str.split(' ', 1))  # 以空格为分隔符,分隔成两个
'''
['Line1-abcdef', 'Line2-abc', 'Line4-abcd']
['Line1-abcdef', '\nLine2-abc \nLine4-abcd']
'''

3. find()与index()辨析

s.index(x):返回字符串s中出现x的最左端的索引值,如果不在则抛出ValueError异常(报错)

s.find(x) :返回字符串s中出现x的最左端字符的索引值,如果不在则返回-1

均为找到x即返回,不进行后面的二次判断。

s = 'Hello, how are you?'
print(s.find('o'))
print(s.index('o'))
print(s.find('i'))
'''
4
4
-1
'''
print(s.index('i'))
'''
ValueError: substring not found
'''

4.切片

格式: [starts: end: step]

• [:] 提取从开头(默认位置0)到结尾(默认位置-1)的整个字符串
• [start:] 从start 提取到结尾
• [:end] 从开头提取到end - 1
• [start: end] 从start 提取到end - 1
• [start: end: step] 从start 提取到end - 1,每step 个字符提取一个
• 左侧第一个字符的位置/偏移量为0,右侧最后一个字符的位置/偏移量为-1

注意:字符串倒转

s = 'Hello, how are you?'
print(s[::-1])
'''
?uoy era woh ,olleH
'''

5.其他函数

capitalize(): 首字母变大写

center(width[, fillchar]): 原来字符居中,不够用字符串补全(默认字符)

count(sub[, start[, end]]): 从一个范围内统计某str出现的次数

s = 'hello, how are you?'
print(s.capitalize())
print(s.center(50, '*'))
print(s.count('o', 0, len(s)))

三、关于字符串拼接的方法总结

1.+

str1 = 'hello '
str2 = 'world'
print(str1+str2)

因为字符串为不可变数据类型,则拼接后的新字符串会独占一块新的内存。

拓展:在拼接短的字面值时,由于CPython中的 常数折叠 (constant folding)功能,这些字面值会被转换成更短的形式,例如'a'+'b'+'c' 被转换成'abc','hello'+'world'也会被转换成'hello world'。这种转换是在编译期完成的,而到了运行期时就不会再发生任何拼接操作,因此会加快整体计算的速度。

常数折叠优化有一个限度,它要求拼接结果的长度不超过20。所以,当拼接的最终字符串长度不超过20时,+号操作符的方式,会比后面提到的join等方式快得多,这与+号的使用次数无关。

2.(格式化字符串)%

print('%s %s' % ('hello', 'world'))

3.join()

用于将序列中的元素以指定的字符连接生成一个新的字符串。

l = ['a','a','a','a']
L1 = ''.join(l)   # output is 'aaaa'
L2 = 'b'.join(l)  # output is 'abababa'
L3 = '5'.join(l)  # output is 'a5a5a5a'

4.format()

Python2.6 开始,新增了一种格式化字符串的函数 str.format(),它增强了字符串格式化的功能。

基本语法是通过 {}: 来代替以前的 % 。format 函数可以接受不限个参数,位置可以不按顺序。

# 形式一
print('{0}{1}{0}'.format('a', 'b'))
# 形式二,必须一一对应
print('{}{}'.format('a', 'b'))
# 形式三
print('{name}的年龄是{age}'.format(age=12, name='谢欣然'))
'''
aba
ab
谢欣然的年龄是12
'''

5.f-string

f-string方式出自PEP 498(Literal String Interpolation,字面字符串插值),从Python3.6版本引入。其特点是在字符串前加 f 标识,字符串中间则用花括号{}包裹其它字符串变量。

这种方式在可读性上秒杀format()方式,处理长字符串的拼接时,速度与join()方法相当。

name = 'world'
my_name = '谢欣然'
print(f'Hello {name}, my name is {my_name}.')
# hello world, my name is 谢欣然.

推荐阅读
  • Ihavethisfollowinginputfile:我有以下输入文件:test.csvdone_cfg,,,,port<0>,clk_in,subcktA,ins ... [详细]
  • 超级简单加解密工具的方案和功能
    本文介绍了一个超级简单的加解密工具的方案和功能。该工具可以读取文件头,并根据特定长度进行加密,加密后将加密部分写入源文件。同时,该工具也支持解密操作。加密和解密过程是可逆的。本文还提到了一些相关的功能和使用方法,并给出了Python代码示例。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 本文讨论了使用差分约束系统求解House Man跳跃问题的思路与方法。给定一组不同高度,要求从最低点跳跃到最高点,每次跳跃的距离不超过D,并且不能改变给定的顺序。通过建立差分约束系统,将问题转化为图的建立和查询距离的问题。文章详细介绍了建立约束条件的方法,并使用SPFA算法判环并输出结果。同时还讨论了建边方向和跳跃顺序的关系。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 本文讨论了一个数列求和问题,该数列按照一定规律生成。通过观察数列的规律,我们可以得出求解该问题的算法。具体算法为计算前n项i*f[i]的和,其中f[i]表示数列中有i个数字。根据参考的思路,我们可以将算法的时间复杂度控制在O(n),即计算到5e5即可满足1e9的要求。 ... [详细]
  • 本文整理了Java中java.lang.NoSuchMethodError.getMessage()方法的一些代码示例,展示了NoSuchMethodErr ... [详细]
  • 求数组中字符串的最长公共前缀(Java)
    求数组中字符串的最长公共前缀(牛客网—牛客题霸算法篇—NC55)题目描述给你一个大小为n的字符串数组strs,其中包含n个字符串,编写一个函数来查找字符串数组中的最长公共前缀,返回 ... [详细]
  • 包含A-Z的字母的消息通过以下规则编码:'A'-1'B'-2'Z'-26给定一个包含数字的编码消息,请确定解 ... [详细]
  • 目录4.1.type数据类型检测 ... [详细]
  • 题目描述:一个DNA序列由ACGT四个字母的排列组合组成。G和C的比例(定义为GC-Ratio)是序列中G和C两个字母的总的出现次数除以总的字母数目(也就是序列长度)。在基因工程中,这个 ... [详细]
  • 8.2location对象location对象既是window对象的属性,也是document对象的属性.window.location和document.location引用的是同一个对象. ... [详细]
author-avatar
真相一个
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有