原文: https://www.programiz.com/python-programming/string

在本教程中,您将学习在 Python 中创建,格式化,修改和删除字符串。 此外,还将向您介绍各种字符串操作和函数。

Python 中的字符串是什么?

字符串是字符序列。

字符只是一个符号。 例如,英语具有 26 个字符。

计算机不处理字符,它们处理数字(二进制)。 即使您可能在屏幕上看到字符,它在内部也会作为 0 和 1 的组合进行存储和操作。

字符到数字的这种转换称为编码,而相反的过程是解码。 ASCII 和 Unicode 是一些常用的编码。

在 Python 中,字符串是 Unicode 字符序列。 引入 Unicode 是为了包括所有语言的每个字符并带来统一的编码。 您可以从 Python Unicode 了解 Unicode。


如何在 Python 中创建字符串?

可以通过将字符括在单引号或双引号中来创建字符串。 Python 中甚至可以使用三引号,但通常用于表示多行字符串和文档字符串。

  1. # defining strings in Python
  2. # all of the following are equivalent
  3. my_string = 'Hello'
  4. print(my_string)
  5. my_string = "Hello"
  6. print(my_string)
  7. my_string = '''Hello'''
  8. print(my_string)
  9. # triple quotes string can extend multiple lines
  10. my_string = """Hello, welcome to
  11. the world of Python"""
  12. print(my_string)

运行该程序时,输出为:

  1. Hello
  2. Hello
  3. Hello
  4. Hello, welcome to
  5. the world of Python

如何访问字符串中的字符?

我们可以使用索引访问单个字符,并使用切片访问一系列字符。 索引从 0 开始。尝试访问超出索引范围的字符将引发IndexError。 索引必须是整数。 我们不能使用浮点数或其他类型,这将导致TypeError

Python 允许对其序列进行负索引。

-1的索引指的是最后一项,-2的索引指的是倒数第二项,依此类推。 我们可以使用切片运算符:(冒号)访问字符串中的一系列项目。

  1. #Accessing string characters in Python
  2. str = 'programiz'
  3. print('str = ', str)
  4. #first character
  5. print('str[0] = ', str[0])
  6. #last character
  7. print('str[-1] = ', str[-1])
  8. #slicing 2nd to 5th character
  9. print('str[1:5] = ', str[1:5])
  10. #slicing 6th to 2nd last character
  11. print('str[5:-2] = ', str[5:-2])

当我们运行上面的程序时,我们得到以下输出:

  1. str = programiz
  2. str[0] = p
  3. str[-1] = z
  4. str[1:5] = rogr
  5. str[5:-2] = am

如果尝试访问超出范围的索引或使用非整数的数字,则会出现错误。

  1. # index must be in range
  2. >>> my_string[15]
  3. ...
  4. IndexError: string index out of range
  5. # index must be an integer
  6. >>> my_string[1.5]
  7. ...
  8. TypeError: string indices must be integers

通过考虑索引位于元素之间,可以最好地可视化切片,如下所示。

如果要访问范围,则需要索引,该索引将从字符串中切出一部分。

Python 字符串 - 图1

Python 中的字符串切片


如何更改或删除字符串?

字符串是不可变的。 这意味着字符串的元素一旦分配就无法更改。 我们可以简单地将不同的字符串重新分配给相同的名称。

  1. >>> my_string = 'programiz'
  2. >>> my_string[5] = 'a'
  3. ...
  4. TypeError: 'str' object does not support item assignment
  5. >>> my_string = 'Python'
  6. >>> my_string
  7. 'Python'

我们无法删除或删除字符串中的字符。 但是可以使用del关键字完全删除字符串。

  1. >>> del my_string[1]
  2. ...
  3. TypeError: 'str' object doesn't support item deletion
  4. >>> del my_string
  5. >>> my_string
  6. ...
  7. NameError: name 'my_string' is not defined

Python 字符串操作

字符串可以执行许多操作,这使它成为 Python 中最常用的数据类型之一。

要了解有关 Python 中可用数据类型的更多信息,请访问: Python 数据类型

两个或多个字符串的连接

将两个或多个字符串连接为单个字符串称为连接。

+运算符在 Python 中执行此操作。 只需将两个字符串字面值一起写就可以将它们连接在一起。

*运算符可用于将字符串重复给定的次数。

  1. # Python String Operations
  2. str1 = 'Hello'
  3. str2 ='World!'
  4. # using +
  5. print('str1 + str2 = ', str1 + str2)
  6. # using *
  7. print('str1 * 3 =', str1 * 3)

当我们运行程序时,我们得到以下输出:

  1. str1 + str2 = HelloWorld!
  2. str1 * 3 = HelloHelloHello

一起编写两个字符串字面值也将它们连接起来,就像+运算符一样。

如果要在不同行中连接字符串,可以使用括号。

  1. >>> # two string literals together
  2. >>> 'Hello ''World!'
  3. 'Hello World!'
  4. >>> # using parentheses
  5. >>> s = ('Hello '
  6. ... 'World')
  7. >>> s
  8. 'Hello World'

遍历字符串

我们可以使用循环遍历字符串。 这是一个计算字符串中l数量的示例。

  1. # Iterating through a string
  2. count = 0
  3. for letter in 'Hello World':
  4. if(letter == 'l'):
  5. count += 1
  6. print(count,'letters found')

当我们运行程序时,我们得到以下输出:

  1. 3 letters found

字符串成员资格测试

我们可以使用关键字in来测试字符串中是否存在子字符串。

  1. >>> 'a' in 'program'
  2. True
  3. >>> 'at' not in 'battle'
  4. False

可与字符串一起使用的内置函数

各种与序列一起使用的内置函数也可以与字符串一起使用。

一些常用的是enumerate()len()enumerate()函数返回一个枚举对象。 它包含成对的字符串中所有项目的索引和值。 这对于迭代很有用。

同样,len()返回字符串的长度(字符数)。

  1. str = 'cold'
  2. # enumerate()
  3. list_enumerate = list(enumerate(str))
  4. print('list(enumerate(str) = ', list_enumerate)
  5. #character count
  6. print('len(str) = ', len(str))

当我们运行程序时,我们得到以下输出:

  1. list(enumerate(str) = [(0, 'c'), (1, 'o'), (2, 'l'), (3, 'd')]
  2. len(str) = 4

Python 字符串格式化

转义序列

如果我们要打印类似的字面值,He said, "What's there?",我们不能使用单引号或双引号。 由于文本本身包含单引号和双引号,因此将导致出现SyntaxError

  1. >>> print("He said, "What's there?"")
  2. ...
  3. SyntaxError: invalid syntax
  4. >>> print('He said, "What's there?"')
  5. ...
  6. SyntaxError: invalid syntax

解决此问题的一种方法是使用三引号。 另外,我们可以使用转义序列。

转义序列以反斜杠开头,并且以不同的方式解释。 如果我们使用单引号表示字符串,则必须对字符串内的所有单引号进行转义。 双引号也是如此。 这是代表上述文本的方法。

  1. # using triple quotes
  2. print('''He said, "What's there?"''')
  3. # escaping single quotes
  4. print('He said, "What\'s there?"')
  5. # escaping double quotes
  6. print("He said, \"What's there?\"")

当我们运行程序时,我们得到以下输出:

  1. He said, "What's there?"
  2. He said, "What's there?"
  3. He said, "What's there?"

这是 Python 支持的所有转义序列的列表。

转义序列 描述
\n 换行
\\ 反斜杠
\' 单引号
\" 双引号
\a ASCII 铃声
\b ASCII 退格
\f ASCII 换页
\n ASCII 换行
\r ASCII 回车
\t ASCII 水平制表
\v ASCII 垂直制表
\ooo 具有八进制值的字符
\xHH 十六进制值为HH的字符

这里有些例子

  1. >>> print("C:\\Python32\\Lib")
  2. C:\Python32\Lib
  3. >>> print("This is printed\nin two lines")
  4. This is printed
  5. in two lines
  6. >>> print("This is \x48\x45\x58 representation")
  7. This is HEX representation

原始字符串忽略转义序列

有时我们可能希望忽略字符串中的转义序列。 为此,我们可以将rR放在字符串前面。 这意味着它是一个原始字符串,并且其中的任何转义序列都将被忽略。

  1. >>> print("This is \x61 \ngood example")
  2. This is a
  3. good example
  4. >>> print(r"This is \x61 \ngood example")
  5. This is \x61 \ngood example

格式化字符串的format()方法

字符串对象可用的format()方法在格式化字符串方面非常通用且功能强大。 格式字符串包含大括号{}作为占位符或将被替换的替换字段。

我们可以使用位置参数或关键字参数来指定顺序。

  1. # Python string format() method
  2. # default(implicit) order
  3. default_order = "{}, {} and {}".format('John','Bill','Sean')
  4. print('\n--- Default Order ---')
  5. print(default_order)
  6. # order using positional argument
  7. positional_order = "{1}, {0} and {2}".format('John','Bill','Sean')
  8. print('\n--- Positional Order ---')
  9. print(positional_order)
  10. # order using keyword argument
  11. keyword_order = "{s}, {b} and {j}".format(j='John',b='Bill',s='Sean')
  12. print('\n--- Keyword Order ---')
  13. print(keyword_order)

当我们运行程序时,我们得到以下输出:

  1. --- Default Order ---
  2. John, Bill and Sean
  3. --- Positional Order ---
  4. Bill, John and Sean
  5. --- Keyword Order ---
  6. Sean, Bill and John

format()方法可以具有可选的格式规范。 它们使用冒号与字段名称分隔。 例如,我们可以在给定的空间中将字符串<左对齐,>右对齐或将^居中对齐。

我们还可以将整数格式化为二进制,十六进制等,并且浮点数可以四舍五入或以指数格式显示。 您可以使用大量的格式。 请访问此处,以获取[format()](python-programming_methods_string_format)方法可用的所有字符串格式。

  1. >>> # formatting integers
  2. >>> "Binary representation of {0} is {0:b}".format(12)
  3. 'Binary representation of 12 is 1100'
  4. >>> # formatting floats
  5. >>> "Exponent representation: {0:e}".format(1566.345)
  6. 'Exponent representation: 1.566345e+03'
  7. >>> # round off
  8. >>> "One third is: {0:.3f}".format(1/3)
  9. 'One third is: 0.333'
  10. >>> # string alignment
  11. >>> "|{:<10}|{:^10}|{:>10}|".format('butter','bread','ham')
  12. '|butter | bread | ham|'

旧式格式化

我们甚至可以格式化字符串,例如 C 编程语言中使用的旧sprintf()样式。 我们使用%运算符来完成此操作。

  1. >>> x = 12.3456789
  2. >>> print('The value of x is %3.2f' %x)
  3. The value of x is 12.35
  4. >>> print('The value of x is %3.4f' %x)
  5. The value of x is 12.3457

常见的 Python 字符串方法

字符串对象有许多可用的方法。 我们上面提到的format()方法就是其中之一。 某些常用的方法是lower()upper()join()split()find()replace()等。这是所有 Python 中的字符串的内置方法的完整列表

  1. >>> "PrOgRaMiZ".lower()
  2. 'programiz'
  3. >>> "PrOgRaMiZ".upper()
  4. 'PROGRAMIZ'
  5. >>> "This will split all words into a list".split()
  6. ['This', 'will', 'split', 'all', 'words', 'into', 'a', 'list']
  7. >>> ' '.join(['This', 'will', 'join', 'all', 'words', 'into', 'a', 'string'])
  8. 'This will join all words into a string'
  9. >>> 'Happy New Year'.find('ew')
  10. 7
  11. >>> 'Happy New Year'.replace('Happy','Brilliant')
  12. 'Brilliant New Year'