优秀的编程知识分享平台

网站首页 > 技术文章 正文

Python之字符串_python字符串%d

nanyue 2025-02-21 14:35:17 技术文章 11 ℃

字符串

字符串的本质是:字符序列;

Python不支持单字符类型,单字符也是作为一个字符串使用的;

Python的字符串是不可变的,无法对原字符串做任何修改的;

Python3的字符默认就是16位Unicode编码,ASCII码是Unicode编码的子集。

  • 空字符串

Python允许空字符串的存在,不包含任何字符且长度为0。

c = ''
print(len(c))       #结果:0
  • len()
d = 'abchel'
len(d)  #结果:6

转义字符

我们可以使用\+特殊字符,实现某些难以用字符表示的效果。比如:换行等。常见的转义字符有这些:

转义字符

描述

\(在行尾时)

续行符

\

反斜杠符号

'

单引号

"

双引号

\b

退格(Backspace)

\n

换行

\t

横向制表符

\r

回车

字符串拼接

不换行打印

不想换行,可以通过参数end = '任意字符串'

print("hello",end=' ')
print("hello",end='##')
print("hello")

控制台读取字符串

input()从控制台读取键盘输入的内容。

 myname = input("请输入名字:")
 print("您的名字是:"+myname)

replace() ---- 字符串替换

str() ---- 实现数字转型字符串

a = str(5.20)   #结果是:a = ‘5.20’       
b = str(3.14e2)  #结果是:b = ’314.0’      
c = str(True)   #结果是:c = ‘True’

??当我们调用print()函数时,解释器自动调用了str()将非字符串的对象转成了字符串。

[] ---- 提取字符

>>> a = 'abcdefghijklmnopqrstuvwxyz'
>>> a
'abcdefghijklmnopqrstuvwxyz'
>>> a[0]
'a'
>>> a[3]
'd'
>>> a[26-1]
'z'
>>> a[-1]
'z'
>>> a[-26]
'a'
>>> a[-30]
Traceback (most recent call last):
  File "", line 1, in 
   a[-30]
IndexError: string index out of range

字符串切片slice

切片slice操作可以让我们快速的提取子字符串。标准格式为:

[起始偏移量start:终止偏移量end:步长step]

典型操作(三个量为正数的情况)如下:

操作和说明

示例

结果

[:] 提取整个字符串

“abcdef”[:]

“abcdef”

[start:]从start索引开始到结尾

“abcdef”[2:]

“cdef”

[:end]从头开始知道end-1

“abcdef”[:2]

“ab”

[start:end]从start到end-1

“abcdef”[2:4]

“cd”

[start:end:step]从start提取到end-1,步长是step

“abcdef”[1:5:2]

“bd”


其他操作(三个量为负数)的情况:

示例

说明

结果

"abcdefghijklmnopqrstuvwxyz"[-3:]

倒数三个

“xyz”

"abcdefghijklmnopqrstuvwxyz"[-8:-3]

倒数第八个到倒数第三个(包头不包尾)

'stuvw'

"abcdefghijklmnopqrstuvwxyz"[::-1]

步长为负,从右到左反向提取

'zyxwvutsrqponmlkjihgfedcba'

切片操作时,起始偏移量和终止偏移量不在[0,字符串长度-1]这个范围,也不会报错。起始偏移量小于0则会当做0,终止偏移量大于“长度-1”会被当成-1。例如:

>>> "abcdefg"[3:50]
'defg'

split() ---- 分割

指定分隔符将字符串分割成多个子字符串(存储到列表中),不指定分隔符,默认使用空白字符(换行符/空格/制表符)

>>> a = "to be or not to be"
>>> a.split()
['to', 'be', 'or', 'not', 'to', 'be']
>>> a.split('be')
['to ', ' or not to ', '']

join() ---- 合并

将子字符串连接起来

>>> a = ['hello','hello','hello200']
>>> '*'.join(a)
'hello*hello*hello200'

拼接字符串

拼接字符串要点: 使用字符串拼接符+,会生成新的字符串对象,效率低,因此不推荐使用+来拼接字符串。推荐使用join函数,效率高,因为join函数在拼接字符串之前会计算所有字符串的长度,然后逐一拷贝,仅新建一次对象。

字符串驻留

常量字符串只保留一份。

c = "dd#"
d = "dd#"
print(c is d)   #True

字符串比较

使用== !=对字符串进行比较,是否含有相同的字符。

我们使用is not is,判断两个对象是否同一个对象。比较的是对象的地址,即id(obj1)是否和id(obj2)相等。

成员操作符判断子字符串

in not in 关键字,判断某个字符(子字符串)是否存在于字符串中。

"ab" in "abcdefg"   #true

字符串常用方法

方法和使用示例

说明

结果

len(a)

字符串长度

96

a.startswith('hello')

以指定字符串开头

True

a.endswith('过我')

以指定字符串结尾

True

a.find('hi')

第一次出现指定字符串的位置

2

a.rfind('hi')

最后一次出现指定字符串的位置

29

a.count("编程")

指定字符串出现了几次

3

a.isalnum()

所有字符全是字母或数字

False


去除首尾信息

  • strip() ---- 去除字符串首尾指定信息
  • lstrip() ---- 去除字符串左边指定信息
  • rstrip() ---- 去除字符串右边指定信息

大小写转换

a = "hello  love  programming, love  sss"

示例

说明

结果

a.capitalize()

产生新的字符串,首字母大写

'Hello love programming, love sss'

a.title()

产生新的字符串,每个单词都首字母大写

'Hello Love Programming, Love Sss'

a.upper()

产生新的字符串,所有字符全转成大写

'HELLO LOVE PROGRAMMING, LOVE SSS'

a.lower()

产生新的字符串,所有字符全转成小写

'hello love programming, love sss'

a.swapcase()

产生新的,所有字母大小写转换

'HELLO LOVE PROGRAMMING, LOVE SSS'

格式排版

center()、ljust()、rjust()这三个函数用于对字符串实现排版

>>> a="SSS"
>>> a.center(10,"*")
'***SSS****'
>>> a.center(10)
'  SSS   '
>>> a.ljust(10,"*")
'SSS*******'

判断方法

字符串格式化

  • format()

基本语法是通过 {}:来代替以前的 %

{}是占位符

a = '我的名字是:{0}, 年龄是:{1}'
b = a.format("hello", 18)
print(b) # 我的名字是:hello, 年龄是:18
a = '我的名字是:{name}, 年龄是:{age}'
b = a.format(age=18, name='hello')
print(b) # 我的名字是:hello, 年龄是:18
  • 填充与对齐
>>> "{:*>8}".format("245")
'*****245'
>>> "我是{0},我喜欢数字{1:*^8}".format("hello","666")
'我是hello,我喜欢数字**666***'
  • 数字格式化

数字

格式

输出

描述

3.1415926

{:.2f}

3.14

保留小数点后两位

3.1415926

{:+.2f}

3.14

带符号保留小数点后两位

2.71828

{:.0f}

3

不带小数

5

{:0>2d}

05

数字补零 (填充左边, 宽度为2)

5

{:x<4d}

5xxx

数字补x (填充右边, 宽度为4)

10

{:x<4d}

10xx

数字补x (填充右边, 宽度为4)

1000000

{:,}

1,000,000

以逗号分隔的数字格式

0.25

{:.2%}

25.00%

百分比格式

1000000000

{:.2e}

1.00E+09

指数记法

13

{:10d}

13

右对齐 (默认, 宽度为10)

13

{:<10d}

13

左对齐 (宽度为10)

13

{:^10d}

13

中间对齐 (宽度为10)

可变字符串

import io

s = 'Hello world!!!'
sio = io.StringIO(s) # sio就是可变字符串
print(sio)
print(sio.getvalue())
sio.seek(3) # 指针到索引3的位置
sio.write('***')
print(sio.getvalue())

类型转换

类型转换


int(x [,base])

将x转换为一个整数

long(x [,base] )

将x转换为一个长整数

float(x)

将x转换到一个浮点数

complex(real[,imag])

创建一个复数

str(x)

将对象 x 转换为字符串

repr(x)

将对象 x 转换为表达式字符串

eval(str)

用来计算在字符串中的有效Python表达式,并返回一个对象

Complex(A)

将参数转换为复数型

tuple(s)

将序列 s 转换为一个元组

list(s)

将序列 s 转换为一个列表

set(s)

转换为可变集合

dict(d)

创建一个字典。d 必须是一个序列 (key,value)元组

frozenset(s)

转换为不可变集合

chr(x)

将一个整数转换为一个字符

unichr(x)

将一个整数转换为Unicode字符

ord(x)

将一个字符转换为它的整数值

hex(x)

将一个整数转换为一个十六进制字符串

oct(x)

将一个整数转换为一个八进制字符串

#类型转换

#转换为int
print('int()默认情况下为:', int())
print('str字符型转换为int:', int('010'))
print('float浮点型转换为int:', int(234.23))
#十进制数10,对应的2进制,8进制,10进制,16进制分别是:1010,12,10,0xa
print('int(\'0xa\', 16) = ', int('0xa', 16))
print('int(\'10\', 10) = ', int('10', 10))
print('int(\'12\', 8) = ', int('12', 8))
print('int(\'1010\', 2) = ', int('1010', 2))

#转换为float
print('float()默认情况下为:', float())
print('str字符型转换为float:', float('123.01'))
print('int浮点型转换为float:', float(32))

#转换为complex
print('创建一个复数(实部+虚部):', complex(12, 43))
print('创建一个复数(实部+虚部):', complex(12))

#转换为str字符串
print('str()默认情况下为:', str())
print('float型转换为str:', str(232.33))
print('int转换为str:', str(32))
lists = ['a', 'b', 'e', 'c', 'd', 'a']
print('列表list转换为str:', ''.join(lists))

#转换为list
strs = 'hongten'
print('序列strs转换为list:', list(strs))

#转换为tuple
print('列表list转换为tuple:', tuple(lists))

#字符和整数之间的转换
print('整数转换为字符chr:', chr(67))
print('字符chr转换为整数:', ord('C'))

print('整数转16进制数:', hex(12))
print('整数转8进制数:', oct(12))
最近发表
标签列表