百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

python散装笔记——41: 字符串的方法(2)

itomcoil 2025-02-09 12:37 23 浏览

6: 逆转字符串

使用内置的 reversed() 函数可以反转字符串,该函数接收一个字符串,并以相反的顺序返回一个迭代器。

>>> reversed('hello')

>>> [char for char in reversed('hello')]
['o', 'l', 'l', 'e', 'h']

reversed() 可以封装在对 ''.join()的调用中,以便从迭代器生成一个字符串。

>>> ''.join(reversed('hello'))
'olleh'

对于不熟悉 Python 的用户来说,使用 reversed() 可能更易读,而使用步长为 -1 的扩展切片则更快更简洁。在此,尝试用函数来实现它:

>>> def reversed_string(main_string):
...     return main_string[::-1]
...
>>> reversed_string('hello')
'olleh'

7: 根据分隔符将字符串拆分为字符串列表

str.split(sep=None, maxsplit=-1)

str.split 接收一个字符串,并返回原始字符串的子串列表。不同的行为取决于是否提供或省略 sep 参数。

如果没有提供 sep,或者 sepNone,那么只要有空白,就会进行拆分。但是,前导和尾部空白将被忽略,多个连续的空白字符将被视为单个空白字符:

>>> "This is a sentence.".split()
['This', 'is', 'a', 'sentence.']
>>> " This is a sentence. ".split()
['This', 'is', 'a', 'sentence.']
>>> " ".split()
[]

参数 sep 可用来定义分隔符字符串。原始字符串会在出现分隔符字符串的地方被分割,而分隔符本身则会被丢弃。多个连续的定界符与单个出现的定界符处理方式不同,而是创建空字符串。

>>> "This is a sentence.".split(' ')
['This', 'is', 'a', 'sentence.']

>>> "Earth,Stars,Sun,Moon".split(',')
['Earth', 'Stars', 'Sun', 'Moon']

>>> " This is a sentence. ".split(' ')
['', 'This', 'is', '', '', '', 'a', 'sentence.', '', '']

>>> "This is a sentence.".split('e')
['This is a s', 'nt', 'nc', '.']

>>> "This is a sentence.".split('en')
['This is a s', 't', 'ce.']

默认情况下,分隔符每次出现时都会进行分隔,但 maxsplit 参数会限制分隔的次数。默认值 -1 表示没有限制:

>>> "This is a sentence.".split('e', maxsplit=0)
['This is a sentence.']

>>> "This is a sentence.".split('e', maxsplit=1)
['This is a s', 'ntence.']

>>> "This is a sentence.".split('e', maxsplit=2)
['This is a s', 'nt', 'nce.']

>>> "This is a sentence.".split('e', maxsplit=-1)
['This is a s', 'nt', 'nc', '.']

str.rsplit(sep=None, maxsplit=-1)

当指定了 maxsplit 时,str.rsplit(“右拆分”)与 str.lsplit(“左拆分”)不同。分割从字符串的末尾而不是开头开始:

>>> "This is a sentence.".rsplit('e', maxsplit=1)
['This is a sentenc', '.']
>>> "This is a sentence.".rsplit('e', maxsplit=2)
['This is a sent', 'nc', '.']

注意:Python 规定了执行拆分的最大次数,而大多数其他编程语言则规定了创建子串的最大次数。这可能会在移植或比较代码时造成混淆。

8: 用另一个子串替换一个子串的所有出现次数

Python 的 str 类型也有一个在给定字符串中用另一个子字符串替换一个子字符串的方法。对于要求更高的情况,可以使用 re.sub

str.replace(old, new[, count]):

str.replace接收两个参数 oldnew,其中 old 包含要被 new sub-string替换的old sub-string。可选参数 count 指定要替换的次数:

例如,为了用'spam'替换下面字符串中的'foo',我们可以调用old = 'foo'new = 'spam'str.replace

>>> "Make sure to foo your sentence.".replace('foo', 'spam')
"Make sure to spam your sentence."

如果给定字符串中包含多个与旧参数匹配的示例,则所有出现的示例都会被新参数中提供的值替换:

>>> "It can foo multiple examples of foo if you want.".replace('foo', 'spam')
"It can spam multiple examples of spam if you want."

当然,除非我们为 count 提供一个值。在这种情况下,出现的计数将被替换:

>>> """It can foo multiple examples of foo if you want, or you can limit the foo with the third argument.""".replace('foo', 'spam', 1)
'It can spam multiple examples of foo if you want, or you can limit the foo with the third
argument.'

9: 测试字符串的组成

Python 的 str 类型也有许多方法可以用来评估字符串的内容。这些方法是 str.isalphastr.isdigitstr.isalnumstr.isspace。还可以使用 str.isupperstr.islowerstr.istitle测试大小写。

str.isalpha

例如,str.isalpha 不需要参数,如果给定字符串中的所有字符都是字母,则返回 True

>>> "Hello World".isalpha() # 包含空格
False
>>> "Hello2World".isalpha() # 包含一个数字
False
>>> "HelloWorld!".isalpha() # 包含标点符号
False
>>> "HelloWorld".isalpha()
True

作为一种边缘情况,空字符串在与 "".isalpha() 一起使用时会求值为 False

str.isupper, str.islower, str.istitle

这些方法测试给定字符串中的大写程度。

str.isupper 是一个方法,如果给定字符串中的所有字符都是大写字母,则返回 True,否则返回 False

"HeLLO WORLD".isupper()
False
"HELLO WORLD".isupper()
True
"".isupper()
False

相反,str.islower 是一种方法,如果给定字符串中的所有字符都是小写,则返回 true,否则返回 false

"Hello world".islower()
False
"hello world".islower()
True
"".islower()
False

如果给定字符串是标题式的,即每个单词都以大写字母开头,然后是小写字母,则 str.istitle 返回 True

>>> "hello world".istitle()
False
>>> "Hello world".istitle()
False
>>> "Hello World".istitle()
True
>>> "".istitle()
False

str.isdecimal, str.isdigit, str.isnumeric

str.isdecimal 返回字符串是否为适合表示十进制数的十进制数序列。

str.isdigit 包括不适合表示十进制数的数字,例如上标数字。

str.isnumeric 包括任何数字值,即使不是数字,例如 0-9 范围以外的值。


isdecimal

isdigit

isnumeric

12345

True

True

True

?2??5

True

True

True

?23?????

False

True

True

??

False

False

True

Five

False

False

False

字节字符串(Python 3 中为 bytes,Python 2 中为 str)只支持 isdigit,它只检查基本的 ASCII 数字。与 str.isalpha 一样,空字符串的值为 False

str.isalnum

这是str.isalphastr.isnumeric的组合,具体地说,如果给定字符串中的所有字符都是alphanumeric,即由字母或数字字符组成,则其值为true

>>> "Hello2World".isalnum()
True
>>> "HelloWorld".isalnum()
True
>>> "2016".isalnum()
True
>>> "Hello World".isalnum() # contains whitespace
False

str.isspace

如果字符串只包含空格字符,其值为 True

>>> "\t\r\n".isspace()
True
>>> " ".isspace()
True

有时,一个字符串看起来是 "empty" 的,但我们不知道这是因为它只包含空白还是根本不包含任何字符

>>> "".isspace()
False

为了应对这种情况,我们需要额外的测试

>>> my_str = ''
>>> my_str.isspace()
False
>>> my_str.isspace() or not my_str
True

但测试字符串是否为空或是否只包含空白字符的最简便方法是使用 strip(不带参数,它会删除所有前导和尾部空白字符)。

>>> not my_str.strip()
True

相关推荐

selenium(WEB自动化工具)

定义解释Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7,8,9,10,11),MozillaF...

开发利器丨如何使用ELK设计微服务中的日志收集方案?

【摘要】微服务各个组件的相关实践会涉及到工具,本文将会介绍微服务日常开发的一些利器,这些工具帮助我们构建更加健壮的微服务系统,并帮助排查解决微服务系统中的问题与性能瓶颈等。我们将重点介绍微服务架构中...

高并发系统设计:应对每秒数万QPS的架构策略

当面试官问及"如何应对每秒几万QPS(QueriesPerSecond)"时,大概率是想知道你对高并发系统设计的理解有多少。本文将深入探讨从基础设施到应用层面的解决方案。01、理解...

2025 年每个 JavaScript 开发者都应该了解的功能

大家好,很高兴又见面了,我是"高级前端进阶",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发。1.Iteratorhelpers开发者...

JavaScript Array 对象

Array对象Array对象用于在变量中存储多个值:varcars=["Saab","Volvo","BMW"];第一个数组元素的索引值为0,第二个索引值为1,以此类推。更多有...

Gemini 2.5编程全球霸榜,谷歌重回AI王座,神秘模型曝光,奥特曼迎战

刚刚,Gemini2.5Pro编程登顶,6美元性价比碾压Claude3.7Sonnet。不仅如此,谷歌还暗藏着更强的编程模型Dragontail,这次是要彻底翻盘了。谷歌,彻底打了一场漂亮的翻...

动力节点最新JavaScript教程(高级篇),深入学习JavaScript

JavaScript是一种运行在浏览器中的解释型编程语言,它的解释器被称为JavaScript引擎,是浏览器的一部分,JavaScript广泛用于浏览器客户端编程,通常JavaScript脚本是通过嵌...

一文看懂Kiro,其 Spec工作流秒杀Cursor,可移植至Claude Code

当Cursor的“即兴编程”开始拖累项目质量,AWS新晋IDEKiro以Spec工作流打出“先规范后编码”的系统工程思维:需求-设计-任务三件套一次生成,文档与代码同步落地,复杂项目不...

「晚安·好梦」努力只能及格,拼命才能优秀

欢迎光临,浏览之前点击上面的音乐放松一下心情吧!喜欢的话给小编一个关注呀!Effortscanonlypass,anddesperatelycanbeexcellent.努力只能及格...

JavaScript 中 some 与 every 方法的区别是什么?

大家好,很高兴又见面了,我是姜茶的编程笔记,我们一起学习前端相关领域技术,共同进步,也欢迎大家关注、点赞、收藏、转发,您的支持是我不断创作的动力在JavaScript中,Array.protot...

10个高效的Python爬虫框架,你用过几个?

小型爬虫需求,requests库+bs4库就能解决;大型爬虫数据,尤其涉及异步抓取、内容管理及后续扩展等功能时,就需要用到爬虫框架了。下面介绍了10个爬虫框架,大家可以学习使用!1.Scrapysc...

12个高效的Python爬虫框架,你用过几个?

实现爬虫技术的编程环境有很多种,Java、Python、C++等都可以用来爬虫。但很多人选择Python来写爬虫,为什么呢?因为Python确实很适合做爬虫,丰富的第三方库十分强大,简单几行代码便可实...

pip3 install pyspider报错问题解决

运行如下命令报错:>>>pip3installpyspider观察上面的报错问题,需要安装pycurl。是到这个网址:http://www.lfd.uci.edu/~gohlke...

PySpider框架的使用

PysiderPysider是一个国人用Python编写的、带有强大的WebUI的网络爬虫系统,它支持多种数据库、任务监控、项目管理、结果查看、URL去重等强大的功能。安装pip3inst...

「机器学习」神经网络的激活函数、并通过python实现激活函数

神经网络的激活函数、并通过python实现whatis激活函数感知机的网络结构如下:左图中,偏置b没有被画出来,如果要表示出b,可以像右图那样做。用数学式来表示感知机:上面这个数学式子可以被改写:...