Python 字符串排序列表-外部列表中的内部列表
我试图解决以下问题: 编写一个函数:Python 字符串排序列表-外部列表中的内部列表,python,list,sorting,Python,List,Sorting,我试图解决以下问题: 编写一个函数: def sort_anagrams(list_of_strings): 此函数应接收单词列表并返回字谜,这意味着具有相同字母的所有单词将显示在内部列表中,所有内部列表将显示在外部列表中,请参见示例 list_of_words = ['deltas', 'retainers', 'desalt', 'pants', 'slated', 'generating', 'ternaries', 'smelters', 'termless', 'salted', '
def sort_anagrams(list_of_strings):
此函数应接收单词列表并返回字谜,这意味着具有相同字母的所有单词将显示在内部列表中,所有内部列表将显示在外部列表中,请参见示例
list_of_words = ['deltas', 'retainers', 'desalt', 'pants', 'slated', 'generating', 'ternaries', 'smelters', 'termless', 'salted', 'staled', 'greatening', 'lasted', 'resmelts']
输出应为:
[
['deltas', 'desalt', 'slated', 'salted', 'staled', 'lasted'],
['retainers', 'ternaries'], ['pants'], ['generating', 'greatening'],
['smelters', 'termless', 'resmelts']
]
我尝试了以下方法:
list_of_words=['deltas', 'retainers', 'desalt', 'pants', 'slated', 'generating', 'ternaries', 'smelters', 'termless', 'salted', 'staled', 'greatening', 'lasted', 'resmelts']
cx=sorted(list_of_words,reverse=False,key=lambda x:sorted(x))
print(cx)
但这只是把字谜放在一起,没有我想要的内部列表:
['deltas', 'desalt', 'slated', 'salted', 'staled', 'lasted', 'generating', 'greatening', 'retainers', 'ternaries', 'pants', 'smelters', 'termless', 'resmelts']
这是一种使用collections.defaultdict的方法 例: 使用setdefault 例: 输出:
这是一种使用collections.defaultdict的方法 例: 使用setdefault 例: 输出: 也许使用这个函数会有所帮助 从itertools导入置换 字谜=[] 对于单词列表中的一个单词: 临时列表=[.joinword for word in permutionsone_word] anagrams.appendtemp_列表 印刷变形图 也许使用这个函数会有所帮助 从itertools导入置换 字谜=[] 对于单词列表中的一个单词: 临时列表=[.joinword for word in permutionsone_word] anagrams.appendtemp_列表 印刷变形图
首先,使用sorted作为键对单词列表进行排序,方法与之前相同。然后使用itertools.groupby根据集合对它们进行分组
首先,使用sorted作为键对单词列表进行排序,方法与之前相同。然后使用itertools.groupby根据集合对它们进行分组
您可以对列表进行排序,然后使用对所有具有相同字符的项目进行分组 为此,您首先要规范化每个单词,以便可以找到属于另一个单词的项目。为此,您可以简单地对字符串中的字符进行排序。然后,您必须根据该规范化值对单词列表进行排序,然后根据该值对它们进行分组。然后,您必须解包所有内容以获得所需的输出:
from itertools import groupby
result = [
[y[1] for y in items]
for _, items in groupby(
sorted(
[(''.join(sorted(w)), w) for w in list_of_words]
), key=lambda x: x[0])
]
# [['deltas', 'desalt', 'lasted', 'salted', 'slated', 'staled'],
# ['generating', 'greatening'],
# ['retainers', 'ternaries'],
# ['pants'],
# ['resmelts', 'smelters', 'termless']]
通过先对每个单词进行规范化,可以避免对每个单词进行多次排序。您可以对列表进行排序,然后使用对其中具有相同字符的所有项目进行分组 为此,您首先要规范化每个单词,以便可以找到属于另一个单词的项目。为此,您可以简单地对字符串中的字符进行排序。然后,您必须根据该规范化值对单词列表进行排序,然后根据该值对它们进行分组。然后,您必须解包所有内容以获得所需的输出:
from itertools import groupby
result = [
[y[1] for y in items]
for _, items in groupby(
sorted(
[(''.join(sorted(w)), w) for w in list_of_words]
), key=lambda x: x[0])
]
# [['deltas', 'desalt', 'lasted', 'salted', 'slated', 'staled'],
# ['generating', 'greatening'],
# ['retainers', 'ternaries'],
# ['pants'],
# ['resmelts', 'smelters', 'termless']]
通过先对每个单词进行规范化,可以避免对每个单词进行多次排序。谢谢大家。这是一门基础课程,可以不导入而使用更简单的方法吗?@zachi。您不需要为setdefault方法导入任何内容。谢谢。这非常有帮助,因为这是一门基础课程,是否可以不用导入,而是使用一种更简单的方法进行导入?@zachi。对于setdefault方法,您不需要导入任何内容
[['deltas', 'desalt', 'slated', 'salted', 'staled', 'lasted'],
['retainers', 'ternaries'],
['pants'],
['generating', 'greatening'],
['smelters', 'termless', 'resmelts']]
>>> from itertools import groupby
>>> [list(grp) for _,grp in groupby(sorted(list_of_words, key=sorted), set)]
[['deltas', 'desalt', 'slated', 'salted', 'staled', 'lasted'], ['generating', 'greatening'], ['retainers', 'ternaries'], ['pants'], ['smelters', 'termless', 'resmelts']]
from itertools import groupby
result = [
[y[1] for y in items]
for _, items in groupby(
sorted(
[(''.join(sorted(w)), w) for w in list_of_words]
), key=lambda x: x[0])
]
# [['deltas', 'desalt', 'lasted', 'salted', 'slated', 'staled'],
# ['generating', 'greatening'],
# ['retainers', 'ternaries'],
# ['pants'],
# ['resmelts', 'smelters', 'termless']]