2024-04-20 10:03:45 发布
网友
我想用Javascript或Python编写一段代码,用预定义的字符组合生成一个单词列表文件
例如。 输入=abc 输出= 基础知识 abc Abc aBc abC AbC ABc aBC
我对这两个方面都有非常基本的了解,因此非常感谢您的帮助
多谢各位
使用生成器的简单方法,无需库代码。它返回一个生成器(类似迭代器的对象),但可以轻松地转换为列表
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"))
请注意,后缀的所有子列表都没有完全展开,但生成的生成器对象的数量(每个对象的大小不变)与字符串的长度成正比
我假设您能够导入Python包。因此,请看一下itertools.product:
itertools.product
This tool computes the cartesian product of input iterables.For example, product(A, B) returns the same as ((x,y) for x in A for y in B).
This tool computes the cartesian product of input iterables.
For example, product(A, B) returns the same as ((x,y) for x in A for y in B).
看起来很像你要找的,对吧?这是两个不同列表中所有可能的组合
由于您是Python新手,我假设您不知道map是什么。没什么难懂的:
map
Returns a list of the results after applying the given function to each item of a given iterable (list, tuple etc.)
那很容易!因此,第一个参数是要应用的函数,第二个参数是iterable
我在地图中应用的功能如下:
''.join
通过这种方式,可以将“”设置为分隔符(基本上没有分隔符),并使用.join将每个字符组合在一起
你为什么要把这些角色组合在一起?好吧,你会有一个列表(事实上有很多),你想要一个字符串,所以你最好把这些字符放在每个列表中
现在是最难的部分,地图中的iterable:
itertools.product(*((char.upper(), char.lower()) for char in string)
首先,注意在这种情况下*是所谓的splat操作符。它将序列拆分为单独的函数调用参数
*
splat
既然您知道了这一点,让我们深入了解代码。 您的itertools.product(A,B)的(A,B)现在是(char.upper(),char.lower())。这是char的两个版本,大写和小写。那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,您将无法获得所需的输出,您必须将映射类型转换为列表才能打印
output
使用生成器的简单方法,无需库代码。它返回一个生成器(类似迭代器的对象),但可以轻松地转换为列表
请注意,后缀的所有子列表都没有完全展开,但生成的生成器对象的数量(每个对象的大小不变)与字符串的长度成正比
我假设您能够导入Python包。因此,请看一下
itertools.product
:看起来很像你要找的,对吧?这是两个不同列表中所有可能的组合
由于您是Python新手,我假设您不知道
map
是什么。没什么难懂的:那很容易!因此,第一个参数是要应用的函数,第二个参数是iterable
我在地图中应用的功能如下:
通过这种方式,可以将“”设置为分隔符(基本上没有分隔符),并使用.join将每个字符组合在一起
你为什么要把这些角色组合在一起?好吧,你会有一个列表(事实上有很多),你想要一个字符串,所以你最好把这些字符放在每个列表中
现在是最难的部分,地图中的iterable:
首先,注意在这种情况下
*
是所谓的splat
操作符。它将序列拆分为单独的函数调用参数既然您知道了这一点,让我们深入了解代码。 您的itertools.product(A,B)的(A,B)现在是(char.upper(),char.lower())。这是
char
的两个版本,大写和小写。那char
是什么呢?它是一个辅助变量,每次取给定字符串中每个字符的值因此,对于输入“abc”
char
将在循环中获取值a、b和c,但由于您要求的是大写和小写char
的所有可能组合,因此您将得到您所要求的结果我希望我把一切都讲清楚了。:)
如果您需要在评论中进一步澄清,请告诉我。这是一个基于我前面解释的工作函数:
另外,如果您打印了
output
,您将无法获得所需的输出,您必须将映射类型转换为列表才能打印相关问题 更多 >
编程相关推荐