首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在python中生成一个具有6维唯一元素的列表。

在python中生成一个具有6维唯一元素的列表。
EN

Stack Overflow用户
提问于 2019-03-06 08:52:42
回答 3查看 61关注 0票数 0

我需要一个有6个唯一元素的列表,比如000001,000002,000003等等。它不需要是数字,它可以是一个字符串,比如AAAAAA,AAAAAB,ABCDEF等等。

如果我用np.arange()生成一个列表,我就不会有6维元素。我只决定用“作”圆柱石

但我认为有很多更方便的方法来做这件事。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-03-06 08:59:10

你需要一个笛卡尔积的字符串"ABCDEF“本身,采取了五次(换句话说,六个相同的字符串的乘积)。它可以用product()函数从模块itertools中计算出来。该产品的结果是一个6元组的单个字符列表.用join()将元组转换为字符串。

代码语言:javascript
复制
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的值更改为任何其他不同字符的组合。

票数 3
EN

Stack Overflow用户

发布于 2019-03-06 09:09:27

您可以使用函数combinations_with_replacement()

代码语言:javascript
复制
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()

代码语言:javascript
复制
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']
票数 2
EN

Stack Overflow用户

发布于 2019-03-06 10:20:28

您可以使用np.unravel_index获得一个索引数组:

代码语言:javascript
复制
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]])

之后,您可以或多或少地将索引替换为您喜欢的任何内容:

代码语言:javascript
复制
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')

如果您需要一个单词列表的结果:

代码语言:javascript
复制
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']
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55018979

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档