我正在寻找用Javascript或Python编写的一段代码,这些代码从预定义的字符组合中生成单词列表文件。
例如输入= abc输出=美国广播公司abcAbc银行抗体抗体银行abc
我对这两种方法都有非常基础的知识,因此,感谢所有帮助。
谢谢
我假设您能够导入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
,则不会获得所需的输出,必须将地图类型转换为列表以使其可打印。
使用生成器的简单方法,没有库代码。它返回一个生成器(类似迭代器的对象),但可以轻松转换为列表。
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"))
请注意,后缀的所有子列表都没有完全扩展,但是生成的生成器对象(每个大小不变)的数量与字符串的长度成正比。