2024-04-18 08:16:52 发布
网友
我需要一个与6个独特的元素,如000001,000002,000003等列表。它不是必须在数字,它可以是一个字符串,如AAAAAA,aaaab,ABCDEF等
如果我用np.arange()生成一个列表,我将没有6维元素。我只决定用“for”像这样的词
np.arange()
但我认为有很多更方便的方法。你知道吗
可以使用np.unravel_index获取索引数组:
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”本身的笛卡尔积,取五次(换句话说,六个相同字符串的积)。它可以使用来自模块itertools的product()函数来计算。乘积的结果是一个6元组的单个字符列表。元组被转换成带有join()的字符串。你知道吗
itertools
product()
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的值更改为任何其他不同字符的组合。你知道吗
symbols
您可以使用函数combinations_with_replacement():
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
获取索引数组:之后,您可以或多或少地用您喜欢的任何内容替换索引:
如果需要结果作为单词列表:
你需要字符串“ABCDEF”本身的笛卡尔积,取五次(换句话说,六个相同字符串的积)。它可以使用来自模块
itertools
的product()
函数来计算。乘积的结果是一个6元组的单个字符列表。元组被转换成带有join()
的字符串。你知道吗您可以将
symbols
的值更改为任何其他不同字符的组合。你知道吗您可以使用函数
combinations_with_replacement()
:如果需要所有可能的组合,请使用函数
product()
:相关问题 更多 >
编程相关推荐