input: ['abc', 'cab', 'cafe', 'face', 'goo']
output: [['abc', 'cab'], ['cafe', 'face'], ['goo']]
问题很简单:它按anagrams分组。顺序无关紧要。
当然,我可以用C++来做这(这是我的母语)。但是,我想这可以通过Python在一行中完成。编辑:如果不可能的话,可以写两三行。我是Python新手。为了检查两个字符串是否是anagram,我使用了sorting。
>>> input = ['abc', 'cab', 'cafe', 'face', 'goo']
>>> input2 = [''.join(sorted(x)) for x in input]
>>> input2
['abc', 'abc', 'acef', 'acef', 'goo']
我认为结合map
左右是可行的。但是,我需要使用dict
作为哈希表。我还不知道这一行是否可行。任何提示都会被告知!
可读的单行解决方案:
例如:
这里的关键是使用^{} from the ^{} module 将列表中的项组合在一起。
我们提供给
groupby
的列表必须进行高级排序,以便我们通过sorted(words,key=sorted)
。这里的诀窍是sorted
可以接受一个键函数,并根据该函数的输出进行排序,因此我们再次将sorted
作为键函数传递,这将使用字符串的字母按顺序对单词进行排序。不需要定义自己的函数或创建lambda
。groupby
接受一个键函数,它用来告诉是否应该将项组合在一起,然后我们可以再次将内置的sorted
函数传递给它。最后要注意的是输出是一对键和组对象,所以我们只需要取grouper对象并使用
list
函数将它们转换成一个列表。(顺便说一下,我不会像调用隐藏变量
input
那样调用它,尽管它可能不是您应该使用的变量。)无法阅读的单行解决方案:
(好吧,如果算上导入的话,实际上是2行……
不是一句话而是一个解决方案。。。
相关问题 更多 >
编程相关推荐