使用已知字符生成单词表

问题描述 投票:-1回答:2

我正在寻找用Javascript或Python编写的一段代码,这些代码从预定义的字符组合中生成单词列表文件。

例如输入= abc输出=美国广播公司abcAbc银行抗体抗体银行abc

我对这两种方法都有非常基础的知识,因此,感谢所有帮助。

谢谢

python character generator
2个回答
0
投票

我假设您能够导入Python软件包。因此,请看itertools.product

此工具计算输入可迭代项的笛卡尔积。

例如,product(A,B)返回与(A中x对应B中y等于((x,y))。

看起来很像您要找的东西,对吧?这是来自两个不同列表的所有可能组合。

由于您是Python的新手,所以我假设您不知道map是什么。没什么难理解的:

在将给定函数应用于给定可迭代项的每个项目(列表,元组等)之后,返回结果列表

很简单!因此,第一个参数是要应用的函数,第二个参数是可迭代的。

我在地图中应用的功能如下:

''.join

通过这种方式,您将''设置为分隔符(基本上根本没有分隔符),并使用.join将每个字符放在一起。

为什么要把字符放在一起?好吧,您将有一个列表(实际上有很多),并且想要一个字符串,因此最好将这些字符放在每个列表中。

现在这是困难的部分,地图内的可迭代部分:

itertools.product(*((char.upper(), char.lower()) for char in string)

首先请注意,在这种情况下,*是所谓的splat运算符。它将序列分为函数调用的单独参数。

现在您知道了,让我们深入研究代码。您itertools.product(A,B)的(A,B)现在是(char.upper(),char.lower())。这是char的两个版本,大写和小写。什么是char?它是一个辅助变量,它将一次获取给定字符串中每个字符的值。

因此输入'abc'char在循环中将采用值a,b和c,但是由于您要求使用大写和小写char的所有可能组合,因此您将获得所需的值。

我希望我把一切都弄清楚了。 :)

让我知道您是否需要在评论中进行任何进一步的说明。这是基于我之前的解释的工作功能:

import itertools

def func():
    string = input("Introduce some characters: ")
    output = map(''.join, itertools.product(*((char.upper(), char.lower()) for char in string)))
    print(list(output))

作为附加说明,如果您打印了output,则不会获得所需的输出,必须将地图类型转换为列表以使其可打印。


0
投票

使用生成器的简单方法,没有库代码。它返回一个生成器(类似迭代器的对象),但可以轻松转换为列表。

def lU(s):
    if not s:
        yield ''
    else:
        for sfx in lU(s[1:]):
            yield s[0].upper() + sfx
            yield s[0].lower() + sfx

print list(lU("abc"))

请注意,后缀的所有子列表都没有完全扩展,但是生成的生成器对象(每个大小不变)的数量与字符串的长度成正比。

© www.soinside.com 2019 - 2024. All rights reserved.