在python中生成包含6维唯一元素的列表

2024-04-18 08:16:52 发布

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

我需要一个与6个独特的元素,如000001,000002,000003等列表。它不是必须在数字,它可以是一个字符串,如AAAAAA,aaaab,ABCDEF等

如果我用np.arange()生成一个列表,我将没有6维元素。我只决定用“for”像这样的词

enter image description here

但我认为有很多更方便的方法。你知道吗


Tags: 方法字符串元素列表fornp数字arange
3条回答

可以使用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']

你需要字符串“ABCDEF”本身的笛卡尔积,取五次(换句话说,六个相同字符串的积)。它可以使用来自模块itertoolsproduct()函数来计算。乘积的结果是一个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']

相关问题 更多 >