在Python中,字符串是可迭代的,并且没有包含逆转字符串的函数。排除 string.reverse() 方法的一个理由是给 Python 开发者一个激励来利用这种特殊情况的力量。字符串中的每个字符可以很容易地作为元素序列的一部分来处理,就像其他语言中的数组一样。那么,你如何在Python中反转一个字符串呢?CoursePear Python代写 @2009。

快速答案

在Python中反转字符串的最快方法是使用一个以-1为单位的切片。

‘测试字符串'[::-1]

在Python中,str对象不包括一个内置的反向函数。

如果你正在教自己写代码,这里有几件关于Python字符串的事情你应该知道。

  • 在 Python 中,字符串是不可变的;它们不能被改变。这是为了让用户不能在无意中修改对象的内容,这有助于避免错误。整数、浮点数、元组和布尔是Python中其他几个不可变的对象。
  • 字符串可以被切分。一个字符串可以被切片,以创建一个新的字符串,从一个点开始,向后或向前进行一定距离。它们可以用切片符号或通过创建一个切片对象来形成。

一旦你想明白了,切片符号就很简单。在’Test string'[subscript]中的下标在方括号中包含一个冒号时就会产生一个分片。

它遵循以下格式:

字符串[start:stop:step]

开始段指定了切片开始的整数。如果没有指定,它只是默认为无,对应于从第一个元素开始。同样,如果没有指定停止命令,切片将默认为无,对应于在最后一个元素处结束。步长将默认为无,对应于步长为1。

这里,我们只指定了-1作为步骤。负值将使切片在序列中反向进行。-1将向后穿过序列中的每一个项目,-2将向后穿过序列中的每一个第二项目。

例如,让我们使用切片符号,看看控制台的输出变成什么。

print(‘测试字符串'[1::])

这里的输出从索引值1开始。

输出:EST字符串

现在,让我们把起始值改为负数。

print(‘测试字符串'[-1::])

以负数开始,我们从最后一个索引值减一开始,得到如下结果。

输出:g

让我们把停止值改为1。

print(‘测试字符串'[:1:])

如果停止值为1,则输出在第一个字符后停止。

输出。T

让我们把停止值改为负值。

print(‘测试字符串'[:-1:])

如果停止值为负1,那么输出就会在字符串的最大索引值减1时停止。

输出。测试字符串

在步骤值设置为正1的情况下,我们收到一份字符串的副本。

print(‘测试字符串'[::1])

输出。测试字符串

由此可见,当我们将步长值设置为负1时,我们会收到一份字符串的副本,但却是反过来的。

print(‘测试字符串'[::-1])

输出: gnirts tseT

为了提高可读性,建议你把这个放在一个函数中

def reverse_string(string):

返回字符串[::-1]

这样,你可以在以后的代码中根据需要多次调用这个函数。例如,要向控制台打印一个反转的字符串,你可以使用以下代码。

print(reverse_string(‘Test string’))

控制台的读数将是。

gnirts tseT

作为参考,这里是所有的代码。

def reverse_string(string):

返回字符串[::-1]

print(reverse_string(‘Test string’))

如果你需要在方括号外创建一个切片,那么你就需要创建一个切片对象,并在适当的地方指定无。

slice_object = slice(None,None,-1)

print(‘测试字符串'[slice_object])

切片对象可以被多次重复使用,它们的值可以被改变。它们可能会派上用场,这取决于你的代码的预期结果是什么!

另一个快速答案

另外,你可以用reversed()函数调用join()方法,该函数接收一个可迭代对象中的所有元素,并将它们合并成一个字符串,同时将它们反转。

def reverse_string(string):

return ”.join(reversed(string))

print(reverse_string(‘Test string’))

控制台的输出。

gnirts tseT

下面代码中的”只是表示连接字符串时使用的分隔符。如果你使用下面的代码。

def reverse_string(string):

return ‘! ‘.join(reversed(string))

print(reverse_string(‘Test string’))

你会收到以下相反的输出。

G!N!I!R!T!SǞǞǞǞ!

另一个没有No Slice的答案

对于一些不想花大力气的用户和开发者来说,Python中的片状符号可能很难理解。

然而,一旦理解了基本概念,这种技术对固定字符串操作技术的优势可能会相当明显。

如果你不确定有什么替代方法,不用担心;在Python中,有多种策略可以逆转字符串。Lambda 函数、迭代器和简单的一次性函数声明只是几个例子。开发人员也可以构建自己的string.reverse()函数,尽管了解这种编程语言的许多方面会有好处。

下面是一个在Python中倒转字符串的函数中的简单for循环,首先是声明你的变量。

def reverse_string(string):

reversed_string = “”

for x in string:

reversed_string = x+reversed_string

return(reversed_string)

print(reverse_string(‘Test string’))

输出是与之前相同的反转字符串。

gnirts tseT

发生的情况是,for循环正在迭代 “测试字符串 “中的每个字符。

在第一个循环之后,我们有了第一个字符 “T”。

reversed_string =T+””

然后reversed_string被设置为T,在第二次传递之后,我们得到了 “测试字符串 “中的第二个字符,也就是 “e”。

reversed_string =e+T

因此,reversed_string被设置为eT,在第二次通过for循环后,我们有。

Reverersed_string =s+eT

所以reversed_string被设置为seT,以此类推。

“最佳实践”的答案

为了采用最佳的编程实践,最好从一个空字符串开始,并从旧的字符串创建一个新的字符串。这项任务可以通过在while循环中使用纯语法和字面符号来完成。

def reverse_string(string):

reversed_string = ”

index = len(string)

而索引。

索引 -= 1

reversed_string += string[index]             

返回反转字符串

print(reverse_string(‘Test string’))

你的控制台输出将是。

gnirts tseT

然而,这种方法有其自身的缺点,因为,记住,在 Python 中,字符串是不可变的。这意味着在每一种情况下,看起来好像是在向 new_string 追加一个字符,实际上 Python 是在创建一个新的字符串。然而,在这样的特定情况下,Python 知道如何优化这一点,所以处理时间不会因为多次重复和大量计算而增加。

让我们来分析一下这个代码样本中的功能。

  • 在第一行中,reversed_string = ” 我们只是将reversed_string声明为一个空字符串。
  • 下一行是index = len(string),这里我们通过对通过函数传递的字符串调用len()函数,声明了一个名为index的变量,它等于对象中的项目数。这个例子有11个字符,所以len(string) = 11。
  • while index。这意味着只要表达式评估为真,就持续循环,在这种情况下,只要索引中有元素,就持续循环。
  • index -= 1 这是在每次迭代时将索引值减少1;这将使while循环继续进行11次迭代。
  • reversed_string += string[index]这向你展示了如何使用+=运算符,它执行一个直接的求和和赋值。两个值用加号结合起来,并分配给运算符左边的变量。这就把 reversed_string 设为传递给函数的字符串中的索引值 10。记住,在Python中,字符串是以0为索引的,所以第一个元素从0开始,如下表所示。

元素 T e s t s t r i n g

指数值 0 1 2 3 4 5 6 7 8 9 10

  • 对于第一次迭代,reversed_string被设置为g,然后下一个索引字符被添加到字符串中,所以对于下一次迭代,它被设置为gn,然后是gni,以此类推。当while循环退出时,reversed_string被返回。

理论上说,把所有新创建的字符串收集在一个列表中,以后对它们使用join()方法,避免每次都创建一个新的字符串,这样做的效果会更好。

def reverse_string(string):

created_strings = []

index = len(string)

而索引。

索引 -= 1 

created_strings.append(string[index])。

return ”.join(created_strings)

print(reverse_string(‘Test string’))

这就利用了append()方法,它将一个新元素添加到列表的末尾,而不是使用操作符+=。

表情符号的答案(更好理解)

到目前为止,只有在忽略Unicode修饰符和字母簇的情况下,上述所有方法都是正确的。例如,以下表情符号有多个修饰符👨 👦 👶(家庭:男人、女人、男孩、婴儿)和👨👨 👦(家庭:男人、男人、男孩)。

让我们尝试逆转以下字符串:👨👨👦👨👦👶的百分比。

如果你使用上述方法,你会得到下面的控制台输出。

👦👨👨👶👦👩👨

这是一个由男孩、男人和男人、婴儿、男孩、女人和男人组成的字符串,修饰语被颠倒了,导致字母变得分离。

有一个软件包可以正确地处理字母词组。它可以通过命令行用 pip installer 来安装。在Python 3.9.7中,安装grapheme包的命令是。

py -m pip install grapheme

如果这对你不起作用,尝试用以下方法更新管道。

py -m pip install –upgrade pip setuptools wheel

正确反转带有表情符号的字符串的Python代码需要grapheme包,其过程与以前基本相同。

输入grapheme

def reverse_emojis(string):

g = list(grapheme.graphemes(string))

return ”.join(g[::-1])

print(reverse_emojis(“👨 👦 👶 👨 👦”))

用这个函数打印的控制台输出将是。

👨👨👦👨👩👦👶

这个答案是到目前为止所有解决方案中执行得最慢的。如果输入的字符串包含表情符号,直接抛出一个错误可能更简单、更快速。在命令行中,一定要安装emoji和regex软件包,以确定字符串是否包含emoji。

py -m pip install emoji

py -m pip install regex

然后我们可以创建一个函数,用下面的代码测试字符串中的任何字符是否包含表情符号。

输入表情符号

输入regex

def contains_emoji(string):

emoji_list = []

data = regex.findall(r’\X’, string)

for string in data:

if any(char in emoji.UNICODE_EMOJI[‘en’] for char in string):

emoji_list.append(string)

如果len(emoji_list)>0。

返回(bool(True))

否则。

返回(bool(False))

我们将不得不为其他操作添加这种检查,以确保在反转时正确处理字形和表情符号。我们可以通过这个检查来运行字符串,如果它包含一个表情符号,我们将执行字形反转,如果它不包含,我们将执行其他更快的解决方案之一,以优化处理速度。下面是完整的解决方案。

输入表情符号

输入regex

string = “测试字符串🌼👨 👦 👶。”#这就是测试字符串

def reverse_string(string)。#使用 “备用无片答案 “中的反转方法

reversed_string = “”

for x in string:

reversed_string = x+reversed_string

return(reversed_string)

def contains_emoji(string):

emoji_list = []

data = regex.findall(r’\X’, string)

for string in data:

if any(char in emoji.UNICODE_EMOJI[‘en’] for char in string):

emoji_list.append(string)

return(len(emoji_list))

如果contains_emoji(string)==0。

print(reverse_string(string))

print(“不包含表情符号。”)

否则。

print(reverse_emojis(string))

print(“包含表情符号。”)

控制台的输出如下。

👨👦👶🌼 🌼 🌼 🌼

包含表情符号。

而如果我们把测试字符串的值改为不含表情符号的字符串。

string = “测试字符串”

然后我们收到下面的控制台输出。

gnirts tseT

总结

最后的方法是最稳健的,并且可以提供快速的处理速度和大量的随机生成的迭代。通常情况下,表情符号在大多数用途中是受限制的字符,所以在Python中反转字符串的工作模型中通常不需要这种程度的小心。通过更广泛的测试,《备用无片答案》似乎表现得最快。

CoursePear™是一家服务全球留学生的专业代写
—-我们专注提供高质靠谱的美国、加拿大、英国、澳洲、新西兰代写服务。
—-我们专注提供Essay、统计、金融、CS、经济、数学等覆盖100+专业的作业代写服务。

Python 代写
Python 代写

CoursePear™提供各类学术服务,Essay代写Assignment代写Exam / Quiz助攻Dissertation / Thesis代写Problem Set代做等。