如何在Python中按字母顺序排序单词?

757 阅读4分钟

问题的提出和解决方案概述

在这篇文章中,你将学习如何在Python中按字母顺序排序单词。

为了使它更有趣,我们有以下的运行方案。

一些英语谚语,也被称为 "绕口令",尝试快速说出是很有趣的。它们也被用来提高非英语人士和小孩子对英语的流利程度和发音。

想象一下,如果按字母顺序排列,绕口令会有多大的挑战性?


💬 问题:我们如何编写代码对一个字符串按字母顺序进行排序?

我们可以通过以下方法之一来完成这项任务。


方法1:使用split()和sort()。

这种方法使用Python的内置 string库来引用 split()sort()来显示按字母升序 排列的单词。

twister = 'how much wood would a woodchuck chuck if a woodchuck could chuck wood?'.lower().split()
twister.sort()
print(twister)

上面声明了一个绕口令,将整个字符串转换为小写字母(lower()),并默认在空格(' ')字符上将其分开(split())。结果保存在twister ,格式为 List格式。如果输出到终端,显示如下。

['How', 'much', 'wood', 'would', 'a', 'woodchuck', 'chuck', 'if', 'a', 'woodchuck', 'could', 'chuck', 'wood?']

下面一行将twister (sort())按字母升序排列。如果输出到终端,会显示如下内容。

['a', 'a', 'chuck', 'chuck', 'could', 'how', 'if', 'much', 'wood', 'wood?', 'woodchuck', 'woodchuck', 'would']

方法2:使用split()、sorted()和join()。

这个方法使用Python的内置 string库来引用 split()[sorted()](https://blog.finxter.com/python-sorted-function/)来显示按字母降序排列的单词。

twister = 'I scream, you scream, we all scream for ice cream!'.lower()
twister = ' '.join(sorted(twister.split(), reverse=True)) 
print(twister)

上面声明了一个绕口令,然后将字符串转换为小写 (lower())。结果保存到twister ,格式为 List格式。如果输出到终端,将显示如下。

['i', 'scream,', 'you', 'scream,', 'we', 'all', 'scream', 'for', 'ice', 'cream!']

下面一行默认在空格(' ')字符上将其分开(split())。然后,twister ,按字母降序排列([sorted()](https://blog.finxter.com/python-sorted-function/)) 按字母降序排序 (reverse=True)。

这些词用 join()函数进行组合,保存到twister 并输出到终端。

['you', 'we', 'scream,', 'scream,', 'scream', 'ice', 'i', 'for', 'cream!', 'all']

方法3:使用泡沫排序算法

这个方法使用了著名的 [`Bubble Sort Algorithm`](https://blog.finxter.com/daily-python-puzzle-bubble-sort/).这个函数接受一个 List并对每个元素进行循环,比较两(2)个值,即当前元素值和下一个元素值。大的元素浮在最上面,循环继续,直到列表 被排序。

twister = 'Which wristwatches are Swiss wristwatches?'.lower().split()

def bubblesort(lst):
    for passesLeft in range(len(lst)-1, 0, -1):
        for i in range(passesLeft):
            if lst[i] > lst[i + 1]:
                lst[i], lst[i + 1] = lst[i + 1], lst[i]
    return ' '.join(lst)

print(bubblesort(twister)) 

上面声明了一个绕口令,将整个字符串转换为小写字母(lower()),并默认在空格(' ')字符上将其分开(split())。结果保存在twister ,格式为 List格式。如果输出到终端,显示如下。

['which', 'wristwatches', 'are', 'swiss', 'wristwatches?']

接下来,声明了 bubblesort()函数被声明并接受一个(1)参数,一个可迭代的 List.对这段代码的解释已在上文概述。

然而,我们稍微修改了代码,以返回一个新的字符串,其中包含排序后的 List值。

bubblesort()函数被调用,并将twister 作为参数。结果被输出到终端。

are swiss which wristwatches wristwatches?

方法4:使用sort_values()

这个函数导入了Pandas 库来引用 sort_values()函数。本函数对数据框架中的列进行排序。

为了无误地运行这段代码,请安装所需的库。 要跟上进度,请点击这里下载finxters.csv 文件。把这个文件移到当前工作目录中。

import pandas as pd 

df = pd.read_csv('finxters.csv', skip_blank_lines=True, usecols=['FID', 'Username', 'Rank'])
rank_sort = df.sort_values(by=["Rank"], ascending=True)
print(rank_sort)

以上,导入Pandas 库。

然后,读入finxter.csv 文件,省略空行,选择所述的三(3)列并保存为df

接下来,对Rank 列进行排序,该列包含与用户成绩水平有关的词。数据框架(df )根据这一列进行排序,结果保存到rank_sort ,并输出到终端。

下面是一个显示结果的片段。

识别码用户名等级
030022145wildone92权力
453002481Moon_Star2权力
930022450加尔曼权力
430022359爱丽斯密斯权力
243002328墙_2021权力
493002573jJonesing权力
473002521克尔街自学成才

摘要

这4种按字母排序的方法应该给你足够的信息来选择最适合你编码要求的方法。

祝您好运,编码愉快!