簡體   English   中英

生成已知字符的單詞表

[英]Generate wordlist with known characters

我正在尋找在 Javascript 或 Python 中編寫一段代碼,該代碼從預定義的字符組合中生成一個詞表文件。

例如輸入 = abc output = ABC abc Abc aBc abC AbC ABc aBC

我對這兩者都有非常基本的了解,因此感謝所有幫助。

謝謝

我假設您能夠導入 Python 包。 因此,看一下itertools.product

該工具計算輸入迭代的笛卡爾積。

例如,product(A, B) 返回與 ((x,y) for x in A for y in B) 相同的結果。

它看起來很像您正在尋找的東西,對吧? 這是來自兩個不同列表的所有可能組合。

由於您是 Python 的新手,我假設您不知道map是什么。 沒有什么太難理解的:

將給定的 function 應用於給定可迭代對象(列表、元組等)的每個項目后,返回結果列表

這很容易。 因此,第一個參數是您要應用的 function,第二個參數是您的可迭代參數。

我在map中應用的function如下:

''.join

這樣,您將 '' 設置為分隔符(基本上根本沒有分隔符)並將每個字符與.join 放在一起。

為什么要把角色放在一起? 好吧,您將有一個列表(實際上有很多)並且您想要一個字符串,因此您最好將這些字符放在每個列表中。

現在是困難的部分,map 內部的可迭代:

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

首先注意*在這種情況下是所謂的splat運算符。 它將序列拆分為單獨的 arguments 用於 function 調用。

現在您知道了,讓我們深入研究代碼。 您的 itertools.product(A, B) 的 (A, B) 現在是 (char.upper(), char.lower())。 這是char的兩個版本,大寫和小寫。 什么是char 這是一個輔助變量,它將獲取給定字符串中每個字符的值,一次一個。

因此,對於輸入 'abc' char將在循環中采用值 a、b 和 c,但由於您要求大寫和小寫char的每種可能組合,您將得到您所要求的。

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

如果您需要在評論中進一步澄清,請告訴我。 根據我之前的解釋,這是一個有效的 function:

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,您必須將 map 類型轉換為可打印的列表。

使用生成器的簡單方法,沒有庫代碼。 它返回一個生成器(類似迭代器的對象),但可以輕松轉換為列表。

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"))

請注意,后綴的所有子列表都沒有完全展開,但是生成的生成器對象的數量(每個都是恆定大小)與字符串的長度成正比。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM