python - 从单词列表创建字谜列表

标签 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)

  • 我的输出是 ['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']]

关于python - 从单词列表创建字谜列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30246225/

相关文章:

C#:将年份列表构建为整数

python - 从元组中获取相同的元素并返回两个索引列表

c - 字符数组在识别字谜方面有何用处?

python - 分别输出多位数字的号码列表

c - 给定一些文本输入,找到最大的字谜组

python - 创建一个 python 集合/唯一列表

python - 终端关闭时终止sudo python脚本

python - Scrapy : Create csv file with spider name

python - 在 python - flask - jinja2 模板中迭代多个列表

python - 时间序列 Pandas 的滚动平均值