生成具有已知字符的单词列表

2024-04-20 10:03:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用Javascript或Python编写一段代码,用预定义的字符组合生成一个单词列表文件

例如。 输入=abc 输出= 基础知识 abc Abc aBc abC AbC ABc aBC

我对这两个方面都有非常基本的了解,因此非常感谢您的帮助

多谢各位


Tags: 文件代码列表javascript字符单词abc基础知识
2条回答

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

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

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是什么。没什么难懂的:

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操作符。它将序列拆分为单独的函数调用参数

既然您知道了这一点,让我们深入了解代码。 您的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,您将无法获得所需的输出,您必须将映射类型转换为列表才能打印

相关问题 更多 >