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

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

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)

>我的输出是[‘坏’,’dab’,’bda’,’dba’].但我也想要更多名单
some_list中的其他字谜

我希望输出为:
  – [‘app’,’ppa’]
  – [‘坏’,’dab’,’bda’,’dba’]
  – [‘sad’,’das’]

解决方法:

我建议你编写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)

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

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

for _, group in groupby(sorted(some_list, key=sorted), sorted):
    group = list(group)
    if len(group) > 1:
        print(group)

打印:

['bad', 'dab', 'bda', 'dba']
['sad', 'das']
['app', 'ppa']

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

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

输出:

[['app', 'ppa'], ['bad', 'dab', 'bda', 'dba'], ['sad', 'das']]
上一篇:C#-System.IdentityModel.Policy.IAuthorizationPolicy过时了吗?


下一篇:c# – WCF,Claims,ADFS 3.0