Python 字符串
到目前为止,我们已经讨论了Python中的标准数据类型作为数字。在本教程的这一部分中,我们将讨论Python中最常用的数据类型,即字符串。
Python字符串是由单引号、双引号或三引号括起来的字符集合。计算机不能理解这些字符;在内部,它将操作过的字符以0和1的组合形式存储起来。
每个字符都是以ASCII或Unicode字符进行编码的。所以我们可以说Python字符串也被称为Unicode字符的集合。
在Python中,可以通过将字符或字符序列括在引号中来创建字符串。Python允许我们使用单引号、双引号或三引号来创建字符串。
考虑下面的Python示例来创建一个字符串。
语法
str = "Hi Python !"
在这里,如果我们使用Python脚本检查变量 str 的类型
print(type(str)), then it will print a string (str).
在Python中,字符串被视为字符序列,这意味着Python不支持字符数据类型;相反,一个单独的字符’p’被视为长度为1的字符串。
在Python中创建字符串
我们可以用单引号或双引号将字符括起来来创建字符串。Python还提供了三引号来表示字符串,但通常用于多行字符串或文档字符串。
#Using single quotes
str1 = 'Hello Python'
print(str1)
#Using double quotes
str2 = "Hello Python"
print(str2)
#Using triple quotes
str3 = '''Triple quotes are generally used for
represent the multiline or
docstring'''
print(str3)
输出:
Hello Python
Hello Python
Triple quotes are generally used for
represent the multiline or
docstring
字符串索引和拆分
与其他编程语言类似,Python字符串的索引从0开始。例如,字符串”HELLO”的索引如下图所示。
请考虑以下示例:
str = "HELLO"
print(str[0])
print(str[1])
print(str[2])
print(str[3])
print(str[4])
# It returns the IndexError because 6th index doesn't exist
print(str[6])
输出:
H
E
L
L
O
IndexError: string index out of range
如Python中所示,切片操作符[]用于访问字符串的单个字符。然而,我们可以在Python中使用:(冒号)操作符来访问给定字符串的子串。考虑以下示例。
在这里,我们必须注意切片操作符中给定的上限范围始终是不包括的,即如果给定str = ‘HELLO’,那么str[1:3]将始终包括str[1] = ‘E’,str[2] = ‘L’,而不包括其他任何内容。
考虑以下示例:
# Given String
str = "JAVATPOINT"
# Start Oth index to end
print(str[0:])
# Starts 1th index to 4th index
print(str[1:5])
# Starts 2nd index to 3rd index
print(str[2:4])
# Starts 0th to 2nd index
print(str[:3])
#Starts 4th to 6th index
print(str[4:7])
输出:
JAVATPOINT
AVAT
VA
JAV
TPO
我们可以在字符串中使用负数索引切片;它从最右边的字符开始,其索引为-1。第二个最右边的索引为-2,依此类推。请看下面的图片。
考虑以下示例
str = 'JAVATPOINT'
print(str[-1])
print(str[-3])
print(str[-2:])
print(str[-4:-1])
print(str[-7:-2])
# Reversing the given string
print(str[::-1])
print(str[-12])
输出:
T
I
NT
OIN
ATPOI
TNIOPTAVAJ
IndexError: string index out of range
重新分配字符串
更新字符串的内容就像将其分配给一个新字符串一样简单。字符串对象不支持索引分配,即字符串只能被新字符串替换,因为它的内容不能部分替换。在Python中,字符串是不可变的。
考虑以下示例。
示例1
str = "HELLO"
str[0] = "h"
print(str)
输出:
Traceback (most recent call last):
File "12.py", line 2, in <module>
str[0] = "h";
TypeError: 'str' object does not support item assignment
然而,在示例1中,字符串 str 可以完全赋给一个新的内容,如下例所示。
示例2
str = "HELLO"
print(str)
str = "hello"
print(str)
输出:
HELLO
hello
删除字符串
由于我们知道字符串是不可变的,因此无法删除或移除字符串中的字符。但是我们可以使用 del 关键字删除整个字符串。
str = "JAVATPOINT"
del str[1]
输出:
TypeError: 'str' object doesn't support item deletion
现在我们要删除整个字符串。
str1 = "JAVATPOINT"
del str1
print(str1)
输出:
NameError: name 'str1' is not defined
字符串运算符
运算符 | 描述 |
---|---|
+ |
被称为连接运算符,用于连接运算符两侧的字符串。 |
* |
被称为重复运算符。它连接了多个相同字符串的副本。 |
[] |
被称为切片运算符。用于访问特定字符串的子字符串。 |
[:] |
被称为范围切片运算符。用于访问指定范围的字符。 |
in |
被称为成员运算符。如果指定的子字符串存在于字符串中,则返回true。 |
not in |
也是成员运算符,并对in的操作进行了反转。如果指定的子字符串不存在于字符串中,则返回true。 |
r/R |
用于指定原始字符串。原始字符串在需要打印转义字符的实际含义时使用,例如”C://python”。要将任何字符串定义为原始字符串,只需在字符r或R后面跟随字符串。 |
% |
用于执行字符串格式化。它使用C编程中使用的格式说明符(如%d或%f)来映射它们在python中的值。我们将讨论如何在python中进行格式化操作。 |
示例
考虑以下示例,以理解Python运算符的实际用途。
str = "Hello"
str1 = " world"
print(str*3) # prints HelloHelloHello
print(str+str1)# prints Hello world
print(str[4]) # prints o
print(str[2:4]); # prints ll
print('w' in str) # prints false as w is not present in str
print('wo' not in str1) # prints false as wo is present in str1.
print(r'C://python37') # prints C://python37 as it is written
print("The string str : %s"%(str)) # prints The string str : Hello
输出:
HelloHelloHello
Hello world
o
ll
False
False
C://python37
The string str : Hello
Python字符串格式化
转义字符
假设我们需要写出文本 – They said, “Hello what’s going on?”- 给定的语句可以使用单引号或双引号来书写,但是它会引发 SyntaxError ,因为它同时包含单引号和双引号。
示例
考虑以下示例以了解Python运算符的真正用途。
str = "They said, "Hello what's going on?""
print(str)
输出:
SyntaxError: invalid syntax
我们可以使用三引号来解决这个问题,但是Python提供了转义字符。
反斜杠(/)符号表示转义序列。反斜杠后面可以跟一个特殊字符,它会被解释成不同的含义。字符串中的单引号必须被转义。我们可以对双引号使用相同的方法。
示例-
# using triple quotes
print('''They said, "What's there?"''')
# escaping single quotes
print('They said, "What\'s going on?"')
# escaping double quotes
print("They said, \"What's going on?\"")
输出:
They said, "What's there?"
They said, "What's going on?"
They said, "What's going on?"
转义序列的列表如下:
1. \newline
它忽略了换行符
print("Python1 \
Python2 \
Python3")
输出:
Python1 Python2 Python3
2. \\
反斜杠
print("\\")
输出:
3.\'
单引号
print('\'')
输出:
'
4.\"
双引号
print("\"")
输出:
"
5. \a
ASCII 警报
print("\a")
6.\b
ASCII 退格(BS)
print("Hello \b World")
输出:
Hello World
7.\f
ASCII 换页
print("Hello \f World!")
Hello World!
8. \n
ASCII 换行
print("Hello \n World!")
输出:
Hello
World!
9. \r
ASCII回车(CR)
print("Hello \r World!")
输出:
World!
10. \t
ASCII水平制表符
print("Hello \t World!")
输出:
Hello World!
11. \v
ASCII垂直制表符
print("Hello \v World!")
输出:
Hello
World!
12. \ooo
八进制值的字符
print("\110\145\154\154\157")
输出:
Hello``````
13. \xHH
带十六进制值的字符
print("\x48\x65\x6c\x6c\x6f")
输出:
Hello
这是转义序列的简单示例。
print("C:\\Users\\DEVANSH SHARMA\\Python32\\Lib")
print("This is the \n multiline quotes")
print("This is \x48\x45\x58 representation")
输出:
C:\Users\DEVANSH SHARMA\Python32\Lib
This is the
multiline quotes
This is HEX representation
我们可以通过使用原始字符串来忽略给定字符串中的转义序列。我们可以在字符串前面写上 r 或 R 来实现这一点。考虑以下示例。
print(r"C:\\Users\\DEVANSH SHARMA\\Python32")
输出:
C:\\Users\\DEVANSH SHARMA\\Python32
format()方法
format()方法是格式化字符串中最灵活和有用的方法。大括号 {} 用作字符串中的占位符,并被format()方法的参数替换。让我们看一下下面给出的例子:
# Using Curly braces
print("{} and {} both are the best friend".format("Devansh","Abhishek"))
#Positional Argument
print("{1} and {0} best players ".format("Virat","Rohit"))
#Keyword Argument
print("{a},{b},{c}".format(a = "James", b = "Peter", c = "Ricky"))
输出:
Devansh and Abhishek both are the best friend
Rohit and Virat best players
James,Peter,Ricky
Python使用%运算符进行字符串格式化
Python允许我们使用C中printf语句中使用的格式说明符。在Python中,格式说明符的处理方式与C中的处理方式相同。然而,Python提供了一个额外的运算符%,它用作格式说明符与其值之间的接口。换句话说,我们可以说它将格式说明符绑定到值上。
考虑以下示例。
Integer = 10;
Float = 1.290
String = "Devansh"
print("Hi I am Integer ... My value is %d\nHi I am float ... My value is %f\nHi I am string ... My value is %s"%(Integer,Float,String))
输出:
Hi I am Integer ... My value is 10
Hi I am float ... My value is 1.290000
Hi I am string ... My value is Devansh
Python的字符串函数
Python提供了各种内置函数用于处理字符串。许多字符串函数
方法 | 描述 |
---|---|
capitalize() | 它将字符串的第一个字符大写。此函数在python3中已弃用。 |
casefold() | 返回适用于不区分大小写比较的字符串版本。 |
center(width ,fillchar) | 返回一个使用原始字符串居中填充的空格填充字符串,左右两侧的空格数量相等。 |
count(string,begin,end) | 计算字符串中在begin和end索引之间的子字符串出现的次数。 |
decode(encoding = ‘UTF8’, errors = ‘strict’) | 使用为编码注册的编解码器解码字符串。 |
encode() | 使用注册的编码进行编码,将S编码为字节字符串。默认编码为’utf-8’。 |
endswith(suffix ,begin=0,end=len(string)) | 如果字符串在begin和end之间以给定的后缀结尾,则返回一个布尔值。 |
expandtabs(tabsize = 8) | 将字符串中的制表符展开为多个空格。默认的空格数量为8。 |
find(substring ,beginIndex, endIndex) | 返回字符串中子字符串在begin index和end index之间第一次出现的索引值。 |
format(value) | 使用传递的value返回S的格式化版本。 |
index(subsring, beginIndex, endIndex) | 如果未找到字符串,它会抛出异常。其与find()方法作用相同。 |
isalnum() | 如果字符串中的字符是字母数字,即字母或数字,并且至少有1个字符,则返回true。否则,返回false。 |
isalpha() | 如果所有字符都是字母,并且至少有一个字符,则返回true,否则返回False。 |
isdecimal() | 如果字符串的所有字符都是十进制数字,则返回true。 |
isdigit() | 如果所有字符都是数字,并且至少有一个字符,则返回true,否则返回False。 |
isidentifier() | 它返回true,如果字符串是一个有效的标识符。 |
islower() | 它返回true,如果字符串的字符都是小写,否则返回false。 |
isnumeric() | 它返回true,如果字符串只包含数字字符。 |
isprintable() | 如果s的所有字符都可打印或s为空,则返回true,否则返回false。 |
isupper() | 如果字符串的字符都是大写,则返回false,否则返回False。 |
isspace() | 如果字符串的字符是空白字符,则返回true,否则返回false。 |
istitle() | 如果字符串被正确地标题化,则返回true;否则返回false。标题化的字符串是指第一个字符为大写,而其他字符为小写。 |
isupper() | 如果字符串的所有字符(如果存在)都为大写,则返回true;否则返回false。 |
join(seq) | 将给定序列的字符串表示合并在一起。 |
len(string) | 返回字符串的长度。 |
ljust(width[,fillchar]) |
返回原始字符串左对齐到给定宽度的填充了空格的字符串。 |
lower() | 将字符串的所有字符转换为小写。 |
lstrip() | 删除字符串的所有前导空格,也可用于删除特定字符。 |
partition() | 在S中搜索分隔符sep,并返回它之前的部分、分隔符本身和它之后的部分。如果没有找到分隔符,返回S和两个空字符串。 |
maketrans() | 返回一个用于translate函数的翻译表。 |
replace(old,new[,count]) |
用新的序列替换旧的字符序列。如果给定max,则最多替换max个字符。 |
rfind(str,beg=0,end=len(str)) | 它与find类似,但它向后遍历字符串。 |
rindex(str,beg=0,end=len(str)) | 它与index相同,但它向后遍历字符串。 |
rjust(width,[,fillchar]) |
返回一个空格填充的字符串,原始字符串右对齐到指定的字符数。 |
rstrip() | 它删除字符串的所有尾随空格,并且还可以用于删除尾随的特定字符。 |
rsplit(sep=None, maxsplit = -1) | 它与split()相同,但它从后向前处理字符串。它返回字符串中的单词列表。如果未指定分隔符,则字符串将根据空格进行分割。 |
split(str,num=string.count(str)) | 根据分隔符str拆分字符串。如果未提供分隔符,则按照空格拆分字符串。它返回由与分隔符连接的子字符串组成的列表。 |
splitlines(num=string.count(’\n’)) | 它返回每行移除换行符的字符串列表。 |
startswith(str,beg=0,end=len(str)) | 如果字符串在开始和结束之间以给定的str开头,则返回布尔值。 |
strip([chars]) |
用于对字符串执行lstrip()和rstrip()操作。 |
swapcase() | 它反转字符串中所有字符的大小写。 |
title() | 将字符串转换为标题格式,即字符串 meEruT 将转换为Meerut。 |
translate(table,deletechars = ”) | 根据传入的转换表对字符串进行翻译。 |
upper() | 将字符串中的所有字符转换为大写。 |
zfill(width) | 返回原始字符串,左侧填充零,总计宽度为width个字符;适用于数字,zfill()保留给定的任何正负号(减去一个零)。 |
rpartition() |