Python之字符串处理与格式输出

编程入门 行业动态 更新时间:2024-10-05 03:22:20

Python之<a href=https://www.elefans.com/category/jswz/34/1771434.html style=字符串处理与格式输出"/>

Python之字符串处理与格式输出

前言

大多数语言都有字符串(String)这一数据类型,在Python中String类型的关键字为 str ,其属于扁平序列、不可改变序列,因此对其的操作需要一些技巧。
本文将以方便算法竞赛的角度来整理Python中 str 类型的使用方法,分别从字符串操作与格式化输出两个角度来整理。

字符串处理
标准的序列操作

这里的序列类型就不单单是指字符串了,而是指包含字符串的一种类型。序列类型大体可分为容器序列与扁平序列。
容器序列实际上放的是对象引用,因此可以存放不同类型的数据;
扁平序列存放的是对象的值,是一段连续的内存空间,因此要求对象必须是相同的数据类型才行,如字符、数字、字节。字符串是扁平序列。

当然,按照是否可修改还可以分为可变序列与不可变序列,不可变序列有tuple、str、bytes;可变序列有list、bytearray 等。字符串是不可变序列。

以上序列都有一些通用的操作,如:索引、切片、加法乘法;当然对于不同的序列这些操作意义也不同。

索引: 和类C语言一样,序列中的元素都是有序排列的,拥有自己的编号(从0开始),我们可以通过索引来得到对应位置上的元素。
索引也可以是负值,负索引代表从后向前数,如 -3 表示倒数第三个元素,以此类推。

切片: Python中有着分片操作符[ : ],[begin : end]将会返回子序列 [begin,end),其中end位置上的元素取不到,所以end是个超尾。
切片的索引同样支持负值,负索引表示倒数第几个元素,需要注意的是起始下标应在终止下标之前,否则将会返回空。

代码示例:

s = "abcdefg"
print(s)
#索引
print(s[2])		#输出索引为2的元素 'c'
print(s[-2])	#输出倒数第2个元素 'f'
#切片
print(s[2:6])	#输出[2,6)位置的子串 "cdef"
print(s[-4:-2])	#输出[倒数第4个元素,倒数第2个元素)子串 "de"

字符串的 '+'与 ’ * ’ 分别是拼接与复制,一试便知,不再赘述。

修改字符串

前面说过,python中的str属于不可修改序列,即不可以通过索引赋值的方式来修改元素;也就是说 s[2] = 'x' 这样的写法是不允许的。那么如果想修改怎么办呢?这里挑几种方便的写法整理:
重新赋值: 具体思路是,通过将需要修改的目标位置用切片切出来,然后替换再拼接,具体代码如:

s = "abcdefg"
print(s)
s = s[:4] + "x" + s[5:]
print(s)

使用replace函数: 可以通过调用字符串方法replace( s , t )将字符串内的所有子串 s 替换为 t 后返回。

s = "abcdefgabc"
print(s)
#将abcdefabc替换为xxxdefxxx
s2 = s.replace("abc","xxx")
print(s2)

还可以通过将字符串转化为列表后修改元素,再用 join 方法转回字符串来达成修改目的,具体选择哪种方法按需求来看。

ASCII码与字符的转换

在一些情形下,尤其是算法竞赛中,快速实现字符转ASCII码是十分重要的,在Python中不能直接对字符用加法或减法来实现转换,而是要通过ord() 和 chr() 函数来实现转换:

print(ord('a'))	#输出字符 a 的ASCII码
print(chr(98))	#输出ASCII码为 98 的字符
格式化输出

对于字符串的输出可以通过调用print()来实现,但是在算法竞赛等一些情况下,这样是不够的,因为我们往往对输出的格式有着严格的要求。

基本的转换说明符

% 字符 标记转换说明符的开始,例如print("Hello, %s " % "egg") # Hello, egg ,这段代码将字符串中的 %s 替换成了字符串 “egg” ;这就是字符串格式化操作符 % 的基本使用方式。
如果要在格式化字符串里包含%,那么必须使用%%,这样Python就不会将百分号误以为是转换说明符了。

print("There is %d people." % 32) 	# There is 32 people.
print("Hello%%, %s " % "egg")			# Hello%, egg
字段宽度和精度

指定宽度和精度同C语言类似,都是类似%.3f以及%5d

print("An egg is %.2f yuan" % 0.8)	        # An egg is 0.80 yuan
print("An egg is %5d yuan" % 1)		# An egg is     1 yuan
符号、对齐和用0填充

在字符宽度和精度值之前还可以放一个“标志”,该表示可以是0 + -

  • 如果是0则表示不足的位置用前导零填充
  • ‘-’ 表示左对齐数值
  • ‘+’ 表示输出符号(不管是正数还是负数)
print("An egg is %05d yuan" % 1)	# An egg is 00001 yuan
print("An egg is %-5d yuan" % 1)	# An egg is 1     yuan
print("An egg is %+d yuan" % 1)	#An egg is +1 yuan
输出不止一个元素

你可能注意到了上述例子都是只输出一个值,一个元素;在C语言中我们可以通过逗号来分隔需要输出的不同元素,那么在Python中如何办到呢?
在Python中,只有元组和字典可以格式化一个以上的值;如果用列表或者其它序列代替元组,那么序列会被解释为一个值。

# 利用元组来输出一个以上的值
print("An egg is %d yuan,two eggs are %d yuan."% (1,2)) 
# An egg is 1 yuan,two eggs are 2 yuan.
参考资料
  • Magnus Lie Hetland,Python基础教程第二版·修定版,北京:人民邮电出版社,45-47

更多推荐

Python之字符串处理与格式输出

本文发布于:2024-02-27 23:55:44,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1767275.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:字符串   格式   Python

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!