草庐IT

盘点Python 中字符串的常用操作

华为云开发者社区 2023-03-28 原文
摘要:盘点 Python 中字符串的几个常用操作,对新手极度的友好。

本文分享自华为云社区《盘点 Python 中字符串的常用操作,对新手极度友好》,作者:TT-千叶 。

在 Python 中字符串的表达方式有四种

一对单引号
一对双引号
一对三个单引号
一对三个双引号
a = ‘abc’
b= “abc”
c = ‘’‘abc’’’
d = “”“abc”""
print(type(a)) # <class ‘str’>
print(type(b)) # <class ‘str’>
print(type©) # <class ‘str’>
print(type(d)) # <class ‘str’>

单双引号混合使用
a = “LiMing say ‘nice to meet you’”

同样也可以通过转义的方式不用在里面写双引号

a = “LiMing say “nice to meet you””
print(a)

总结就是需要外面用了双引号,里面需要引用的语句可以用单引号括起来,反之亦然。

通常情况根据个人喜好,基本都是使用单引号或者双引号。有些特殊情况,比如需要表示多行时,可以选择三个单(双)引号,并且无序用 \ 进行转移,可直接使用单引号和双引号。

a = ‘’’
My Name is 阿亮,
Let’s say ‘Hello’
‘’’
print(a)

字符串的下标和切换
下标:字符串是一个个字符拼接而成,下标可以理解为每个字符的编号,从 0 开始依次类推。

作用:通过下标去操作字符串中的元素

H的下标为0, e的下标为1 …依次类推

a = ‘HelloWorld’

获取字符串a中下标为4的元素

print(a[4]) # o 下标为4的元素为o

修改字符串中的元素是不是可以直接赋值呢? 例如:

a = ‘HelloWorld’

a[4] = ‘k’
print(a)

上面的代码运行之后发现报错。

TypeError: ‘str’ object does not support item assignment

原因是因为: 字符串一旦创建之后,里面的元素是不可以修改的。

所以字符串是无法直接进行修改的。

字符串运算
字符串运算中用到了 + 、*、>、<、!= 、= 等逻辑运算符。

字符串的相加操作,也可以理解为拼接操作。例如:

a = ‘Hello’ + ’ World’
print(a) # Hello World

也可以写成

a = ‘Hello’ ’ World’
print(a) # Hello World

字符串的乘法操作,可以理解为克隆操作,字符串只能与整数(n)想乘,代表克隆 n 个字符串。

a = ‘a’
print(a * 2) # aa
b = ‘-’
print(b * 10) # ----------

切片
字符串的切片也称为字符串截取。 所有操作都是通过字符串的下标进行操作的。

用法:字符串 [开始索引(start):结束索引(end):步长(step)(默认 1)]

步长(step):每隔(step-1)个取一个元素,当 step 为负数时,代表从右向左取元素,

a = ‘abcdefghijklmn’

从下标1开始 到4结束 进行切片 (包括1,不包括4,即左开又闭)

print(a[1:4]) # bcd
print(a[1:8]) # bcdefgh
print(a[1:8:2])# 步长为2, 结果:bdfh

当补偿为负数时,代表逆向截取。 初始从坐标8开始,每隔一个元素取一个值,到下标为1时结束

print(a[8:1:-2]) # igec

字符串的常用操作
这里以代码 + 注释的方式,展示几个常用的字符串操作。

a = ’ Hello World ’

获取字符串的长度

print(len(a)) # 13

删除字符串两边的空格

print(a.strip()) # Hello World

删除左边的空格

print(a.lstrip()) # Hello World (只删除左边的空格)

删除字符串右边的空格

print(a.rstrip()) # Hello World

通过指定连接符 链接字符串

lst = [‘LiMing’, ‘Tom’]
print(’***’.join(lst)) # LiMing***Tom

首字母大写

m = ‘hello world’
print(m.capitalize()) # Hello world

返回标题化字符串,即每个单词首字母大写

print(m.title()) # Hello World

打印输出字符,将字符串放在中间,

center(width, fillchar) width: 字符串的总长度, fillchar:填充字符

print(a.center(20, ‘*’)) # *** Hello World ****

是否以xxx开头

n = ‘Hello’
print(n.startswith(‘H’)) # True

是否以xxx结尾

print(n.endswith(‘o’)) # True

字符串是全纯英文字符

print(a.isalpha()) # False , 因为字符串a中 ’ Hello World ’ 有空格,因此返回False
print(‘HelloWorld’.isalpha()) #True

判断字符串中是否全部为数字或者英文

print(‘Hello2World’.isalnum()) # True
print(‘123’.isalnum()) # True
print(‘abc&11’.isalnum()) # False

判断是否为整数

print(‘123’.isdigit()) # True
print(‘1.23’.isdigit()) # False

判断字符是否全为小写

print(‘abc’.islower()) # True

判断字符是否全为大写

print(‘Abc’.isupper()) # False
print(‘ABC’.isupper()) # True

字符串小写转大写

print(‘abc’.upper()) # ABC

字符串大写转小写

print(‘ABC’.lower()) # abc

字符串的替换

b = ‘aabbcc’.replace(‘a’, ‘m’)
print(b) # mmbbcc

1 代表替换的个数

b = ‘aabbcc’.replace(‘a’, ‘m’, 1)
print(b) # mabbcc

split 字符串切割,默认空格切割

print(‘aa bb cc’.split()) # [‘aa’, ‘bb’, ‘cc’]
print(‘ab,cd,ef’.split(’,’)) # [‘ab’, ‘cd’, ‘ef’]

字符串换行分割

a = “”"
My Name is ‘762459510,
欢迎添加
“”"
print(a.splitlines()) # [’’, " My Name is ‘762459510’,", ’ 欢迎添加’, ’ ']

字符串的查找
字符串查找常用的方法用 index、find

两者功能相似,区别在于 find 查找不到元素时返回 -1, 不会影响程序运行,而 index 则会抛出异常。

a = ‘abcdef’

查找到元素返回对应的下标

print(a.find(‘c’)) # 2
print(a.find(‘h’)) # -1

print(a.index(‘c’)) # 2
print(a.index(‘h’)) # 抛出异常,ValueError: substring not found

rfind: 类似于 find () 函数,不过是从右边开始查找;返回字符串最后一次出现的位置,如果没有匹配项则返回 - 1 。rindex 同理
a = ‘acmncd’

从右边开始计算,返回第一个匹配到的下标

print(a.rfind(‘c’)) # 4
print(a.rindex(‘c’)) # 4

字符串的格式化
name = ‘762459510’

%s 用于输出字符串

print(‘我的月球号是: %s’ % name)
age = 18

%d 用于输出十进制数字

print(‘我的年龄是:%d’ % age)
money = 1.23

%f 浮点数,默认显示小数点后6位

print(‘我身上有:%f 元’ % money )

指定小数点后的位数

print(‘我身上有:%.2f 元’ % money )

format 操作
除了使用 % 进行格式化,也可以使用 format

print(’{} {}’.format(‘Hello’, ‘World’)) # Hello World
print(’{0} {1}’.format(‘Hello’, ‘World’)) # Hello World

print(’{1}, {0}, {1}’.format(‘A’, ‘B’)) #B, A, B

print(‘今年是 {}年.’.format(2022)) # 今年是 2022年.

 

点击关注,第一时间了解华为云新鲜技术~

有关盘点Python 中字符串的常用操作的更多相关文章

  1. ruby - 如何从 ruby​​ 中的字符串运行任意对象方法? - 2

    总的来说,我对ruby​​还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用

  2. Ruby 解析字符串 - 2

    我有一个字符串input="maybe(thisis|thatwas)some((nice|ugly)(day|night)|(strange(weather|time)))"Ruby中解析该字符串的最佳方法是什么?我的意思是脚本应该能够像这样构建句子:maybethisissomeuglynightmaybethatwassomenicenightmaybethiswassomestrangetime等等,你明白了......我应该一个字符一个字符地读取字符串并构建一个带有堆栈的状态机来存储括号值以供以后计算,还是有更好的方法?也许为此目的准备了一个开箱即用的库?

  3. ruby-on-rails - 在 Rails 中将文件大小字符串转换为等效千字节 - 2

    我的目标是转换表单输入,例如“100兆字节”或“1GB”,并将其转换为我可以存储在数据库中的文件大小(以千字节为单位)。目前,我有这个:defquota_convert@regex=/([0-9]+)(.*)s/@sizes=%w{kilobytemegabytegigabyte}m=self.quota.match(@regex)if@sizes.include?m[2]eval("self.quota=#{m[1]}.#{m[2]}")endend这有效,但前提是输入是倍数(“gigabytes”,而不是“gigabyte”)并且由于使用了eval看起来疯狂不安全。所以,功能正常,

  4. ruby-on-rails - unicode 字符串的长度 - 2

    在我的Rails(2.3,Ruby1.8.7)应用程序中,我需要将字符串截断到一定长度。该字符串是unicode,在控制台中运行测试时,例如'א'.length,我意识到返回了双倍长度。我想要一个与编码无关的长度,以便对unicode字符串或latin1编码字符串进行相同的截断。我已经了解了Ruby的大部分unicode资料,但仍然有些一头雾水。应该如何解决这个问题? 最佳答案 Rails有一个返回多字节字符的mb_chars方法。试试unicode_string.mb_chars.slice(0,50)

  5. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  6. ruby - 将差异补丁应用于字符串/文件 - 2

    对于具有离线功能的智能手机应用程序,我正在为Xml文件创建单向文本同步。我希望我的服务器将增量/差异(例如GNU差异补丁)发送到目标设备。这是计划:Time=0Server:hasversion_1ofXmlfile(~800kiB)Client:hasversion_1ofXmlfile(~800kiB)Time=1Server:hasversion_1andversion_2ofXmlfile(each~800kiB)computesdeltaoftheseversions(=patch)(~10kiB)sendspatchtoClient(~10kiBtransferred)Cl

  7. ruby-on-rails - Rails 常用字符串(用于通知和错误信息等) - 2

    大约一年前,我决定确保每个包含非唯一文本的Flash通知都将从模块中的方法中获取文本。我这样做的最初原因是为了避免一遍又一遍地输入相同的字符串。如果我想更改措辞,我可以在一个地方轻松完成,而且一遍又一遍地重复同一件事而出现拼写错误的可能性也会降低。我最终得到的是这样的:moduleMessagesdefformat_error_messages(errors)errors.map{|attribute,message|"Error:#{attribute.to_s.titleize}#{message}."}enddeferror_message_could_not_find(obje

  8. ruby - 如何以所有可能的方式将字符串拆分为长度最多为 3 的连续子字符串? - 2

    我试图获取一个长度在1到10之间的字符串,并输出将字符串分解为大小为1、2或3的连续子字符串的所有可能方式。例如:输入:123456将整数分割成单个字符,然后继续查找组合。该代码将返回以下所有数组。[1,2,3,4,5,6][12,3,4,5,6][1,23,4,5,6][1,2,34,5,6][1,2,3,45,6][1,2,3,4,56][12,34,5,6][12,3,45,6][12,3,4,56][1,23,45,6][1,2,34,56][1,23,4,56][12,34,56][123,4,5,6][1,234,5,6][1,2,345,6][1,2,3,456][123

  9. ruby - 什么是填充的 Base64 编码字符串以及如何在 ruby​​ 中生成它们? - 2

    我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%

  10. ruby - 如何使用文字标量样式在 YAML 中转储字符串? - 2

    我有一大串格式化数据(例如JSON),我想使用Psychinruby​​同时保留格式转储到YAML。基本上,我希望JSON使用literalstyle出现在YAML中:---json:|{"page":1,"results":["item","another"],"total_pages":0}但是,当我使用YAML.dump时,它不使用文字样式。我得到这样的东西:---json:!"{\n\"page\":1,\n\"results\":[\n\"item\",\"another\"\n],\n\"total_pages\":0\n}\n"我如何告诉Psych以想要的样式转储标量?解

随机推荐