Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 字符串排序列表-外部列表中的内部列表_Python_List_Sorting - Fatal编程技术网

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']]