簡體   English   中英

在python中生成具有6維唯一元素的列表

[英]generate a list with 6-dimensional unique elements in python

我需要一個包含6個唯一元素的列表,例如000001、000002、000003等。它不一定是數字,它可以是字符串,例如AAAAAA,AAAAAB,ABCDEF等。

如果使用np.arange()生成列表,則不會包含6維元素。 我只決定使用像

在此處輸入圖片說明

但我認為有很多更方便的方法可以做到這一點。

您需要單獨使用字符串“ ABCDEF”的笛卡爾積,取五次(換句話說,就是六個相同字符串的積)。 可以使用itertools模塊中的product()函數來計算。 該乘積的結果是一個包含6個元組的單個字符的列表。 元組通過join()轉換為字符串。

from itertools import product
symbols = "ABCDEF"
[''.join(x) for x in product(*([symbols] * len(symbols)))]
#['AAAAAA', 'AAAAAB', 'AAAAAC', 'AAAAAD', 'AAAAAE', 
# 'AAAAAF', 'AAAABA', 'AAAABB', 'AAAABC', 'AAAABD',...
# 'FFFFFA', 'FFFFFB', 'FFFFFC', 'FFFFFD', 'FFFFFE', 'FFFFFF']

您可以將symbols的值更改為其他不同字符的組合。

您可以使用功能combinations_with_replacement()

from itertools import combinations_with_replacement

list(map(''.join, combinations_with_replacement('ABC', r=3)))
# ['AAA', 'AAB', 'AAC', 'ABB', 'ABC', 'ACC', 'BBB', 'BBC', 'BCC', 'CCC']

如果需要所有可能的組合,請使用product()函數:

from itertools import product

list(map(''.join, product('ABC', repeat=3)))
# ['AAA', 'AAB', 'AAC', 'ABA', 'ABB', 'ABC', 'ACA', 'ACB', 'ACC', 'BAA', 'BAB', 'BAC', 'BBA', 'BBB', 'BBC', 'BCA', 'BCB', 'BCC', 'CAA', 'CAB', 'CAC', 'CBA', 'CBB', 'CBC', 'CCA', 'CCB', 'CCC']

您可以使用np.unravel_index來獲取索引數組:

idx = np.array(np.unravel_index(np.arange(30000), 6*(6,)), order='F').T
idx
# array([[0, 0, 0, 0, 0, 0],
#        [0, 0, 0, 0, 0, 1],
#        [0, 0, 0, 0, 0, 2],
#        ...,
#        [3, 5, 0, 5, 1, 3],
#        [3, 5, 0, 5, 1, 4],
#        [3, 5, 0, 5, 1, 5]])

之后,您可以使用更多或更少的內容替換索引:

symbols = np.fromiter('ABCDEF', 'U1')
symbols
# array(['A', 'B', 'C', 'D', 'E', 'F'], dtype='<U1')
symbols[idx]
# array([['A', 'A', 'A', 'A', 'A', 'A'],
#        ['A', 'A', 'A', 'A', 'A', 'B'],
#        ['A', 'A', 'A', 'A', 'A', 'C'],
#        ...,
#        ['D', 'F', 'A', 'F', 'B', 'D'],
#        ['D', 'F', 'A', 'F', 'B', 'E'],
#        ['D', 'F', 'A', 'F', 'B', 'F']], dtype='<U1')

如果需要將結果作為單詞列表:

final = symbols[idx].view('U6').ravel().tolist()
final[:20]
# ['AAAAAA', 'AAAAAB', 'AAAAAC', 'AAAAAD', 'AAAAAE', 'AAAAAF', 'AAAABA', 'AAAABB', 'AAAABC', 'AAAABD', 'AAAABE', 'AAAABF', 'AAAACA', 'AAAACB', 'AAAACC', 'AAAACD', 'AAAACE', 'AAAACF', 'AAAADA', 'AAAADB']

暫無
暫無

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

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