我想从单词列表中找到创建字谜列表。我应该在我的代码中使用另一个循环还是递归?
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)
- 我的输出是
['bad', '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']]