从单词列表中创建字谜列表

pk.*_*pk. 3 python list anagram

我想从单词列表中找到字谜的创建列表.我应该在我的代码或递归中使用另一个循环吗?

some_list = ['bad', 'app', 'sad', 'mad', 'dab','pge', 'bda', 'ppa', 'das', 'dba']

new_list = [some_list[0]]
i = 0
while i+1 < len(some_list):
    if (''.join(sorted(some_list[0]))) == (''.join(sorted(some_list[i+1]))):
        new_list.append(some_list[i+1])
        i = i+1
    else:
        i = i+1

print(new_list)
Run Code Online (Sandbox Code Playgroud)
  • 我的输出是['bad', 'dab', 'bda', 'dba'].但我还想要更多其他字谜的列表some_list.

我希望输出为: - ['app', 'ppa'] - ['bad', 'dab', 'bda', 'dba'] -['sad', 'das']

Ste*_*ann 5

我建议你编写Python,而不是Java或其他任何你在那里学习的语言.这是你在Python中的核心代码,具有正常的循环,没有所有不必要的东西:

new_list = [some_list[0]]
for word in some_list[1:]:
    if sorted(some_list[0]) == sorted(word):
        new_list.append(word)
Run Code Online (Sandbox Code Playgroud)

我没有看到用于递归,但是,你可以在它周围包围一个外环来找到其他的anagram组.


虽然我是这样做的,但使用有用的itertools.groupby:

for _, group in groupby(sorted(some_list, key=sorted), sorted):
    group = list(group)
    if len(group) > 1:
        print(group)
Run Code Online (Sandbox Code Playgroud)

打印:

['bad', 'dab', 'bda', 'dba']
['sad', 'das']
['app', 'ppa']
Run Code Online (Sandbox Code Playgroud)

通过对组进行排序来更改问题的替代解决方案:

groups = (list(group) for _, group in groupby(sorted(some_list, key=sorted), sorted))
print([group for group in sorted(groups) if len(group) > 1])
Run Code Online (Sandbox Code Playgroud)

输出:

[['app', 'ppa'], ['bad', 'dab', 'bda', 'dba'], ['sad', 'das']]
Run Code Online (Sandbox Code Playgroud)