簡體   English   中英

如何在Python中制作包含多個變量的單行列表?

[英]How to make an One-Liner list with multiple variables in Python?

我很想知道是否可以在一行中定義ascii_combinations列表,而不使用下面示例中使用的循環...

ascii_printable = [chr(count) for count in range(32, 127)]
ascii_combinations = []

for x1 in ascii_printable:
    for x2 in ascii_printable:
        for x3 in ascii_printable:
            ascii_combinations.append(x1 + x2 + x3)

我想使用95個單字符ASCII字符創建所有可能的3個字符長組合的列表。 我使用此代碼使其工作,但由於設法將ascii_printable縮短為One-Liner,因此我對是否可以對其他列表做同樣的事情很感興趣。

由於要創建笛卡爾積,因此標准方法是使用itertools.product

import itertools

ascii_printable = [chr(count) for count in range(32, 127)]
ascii_combinations = [x1+x2+x3 for x1, x2, x3 in itertools.product(ascii_printable, repeat=3)]

您可以將itertools.product用作

from itertools import product

ascii_printable = [chr(count) for count in range(32, 127)]
ascii_combinations = [x1 + x2 + x3 for x1, x2, x3 in product(ascii_printable, repeat=3)]

另外chr(count) for count in range(32, 127)也不如

from itertools import product
from string import printable

ascii_combinations = [x1 + x2 + x3 for x1, x2, x3 in product(printable[:-5], repeat=3)]

最后,理解力很好,但是有時候,就可迭代圖而言,恕我直言,因此

from itertools import product
from string import printable
list(map(''.join, product(printable[:-5], repeat=3)))

結果為True:

ascii_printable = [chr(count) for count in range(32, 127)]
ascii_combinations = []

for x1 in ascii_printable:
    for x2 in ascii_printable:
        for x3 in ascii_printable:
            ascii_combinations.append(x1 + x2 + x3)

test = [x1+x2+x3 for x1 in ascii_printable for x2 in ascii_printable for x3 in ascii_printable]

print(test == ascii_combinations)

暫無
暫無

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

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