我想从单词列表中找到字谜的创建列表.我应该在我的代码或递归中使用另一个循环吗?
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']]