基于unicode顺序的字符字母排序



输入的第一行应该以测试用例的数量开始。以下几行应该包含由一个或多个单词组成的测试用例,用空格分隔。一个单词由扩展Ascii编码的256个字符中的任何一个组成。

样本输入:

3 
Good day
Hello there!
You're my #1!

然后,输出应该为每个测试用例输出一行,其中包含按字母顺序(基于unicode顺序(排序的唯一字符(不区分大小写(,同时忽略空白。

样本输出:

adgoy
!ehlort
!#'1emoruy

我正在想办法解决这个问题,但我一无所获。我应该如何处理?

编辑添加:我发现了以下函数:ord((-获取字符的unicode,chr((-获得给定unicode 的字符

让我们调用要按unicodes:排序的字符串

s = 'Good day'

首先,你需要删除空白有多种方法,一种是str.translate,如下表所示:

s = s.translate({32: None, 9: None, 10: None, 13: None, 11: None, 12: None})

现在,由于您想忽略这种情况,您需要在字符串上调用.upper.lower.casefold,并重新分配它:

s = s.lower()

因为您只需要字符串中的唯一字符,所以可以将其转换为set:

s = set(s)

因为set是无序的,所以必须先转换它,然后才能对它进行排序(在本例中为list(

s = list(s)

现在你需要按照他们的unicode编号进行排序:

s.sort(key=ord)  # do not reassign

最后,您需要将其重新转换为字符串:

s = ''.join(s)

在所有步骤中使用相同的变量名有时被认为是一种糟糕的做法,因为这可能很难调试
在完整的代码中,我结合了一些步骤并更改了变量名:

def sort_by_unicode(s):
s = s.translate({32: None, 9: None, 10: None, 13: None, 11: None, 12: None}).lower()
l = list(set(s))
l.sort(key=ord)
return ''.join(l)

最新更新