为了账号安全,请及时绑定邮箱和手机立即绑定

生成每个字符一定数量的字符序列

生成每个字符一定数量的字符序列

牧羊人nacy 2021-09-14 17:44:46
所以我目前正在使用以下方法生成一系列字符作为字符串:def nth(lists, num):    res = []    for a in lists:        res.insert(0, a[num % len(a)])        num //= len(a)    return resdef generate_page(chars, length, iteration):    result = nth([chars] * length, iteration)    return "".join(result)length = 15seed = 16number = generate_page('0123456789ABC', length, seed)但是我无法理解的是,如果我知道我想要多少每个字符,我将如何生成一系列字符。例如,假设我想生成一个具有 1 个“A”、3 个“B”和 1 个“C”的序列,我如何才能获得“ABBBC”的任何排列?我想我只是连接一个我知道我想要的金额列表,然后像这样把它们打乱:A = 1B = 3C = 1listOfCharacters = ["A"]*A + ["B"]*B + ["C"]*C>>> ['A', 'B', 'B', 'B', 'C']random.seed(1)listOfCharacters = random.shuffle(listOfCharacters)>>> NonelistOfCharacters = ''.join(listOfCharacters)>>> TypeError但目前我显然得到了一个 TypeError,我什至不确定这是否是检索所有排列而不用种子重复的最佳途径。
查看完整描述

3 回答

?
陪伴而非守候

TA贡献1757条经验 获得超8个赞

只需这样做:


import itertools

match = 'ABBBC' #string of letter combinations to match.

permutations = itertools.permutations(match) #get all

all_combos = list({''.join(per) for per in permutations}) #use sets to remove duplicates

的值all_combos是所有可能组合的列表。


查看完整回答
反对 回复 2021-09-14
?
aluckdog

TA贡献1847条经验 获得超7个赞

避免重复的更好方法是使用@BillBell 在这里指出的正确工具:具有唯一值的排列。从本质上讲,我们正在处理的多集,并使用sympy我们可以得到想要的结果:


from sympy.utilities.iterables import multiset_permutations


for item in multiset_permutations(listOfCharacters):

    print(''.join(item))


ABBBC

ABBCB

ABCBB

ACBBB

BABBC

BABCB

BACBB

BBABC

BBACB

BBBAC

BBBCA

BBCAB

BBCBA

BCABB

BCBAB

BCBBA

CABBB

CBABB

CBBAB

CBBBA



查看完整回答
反对 回复 2021-09-14
?
慕姐4208626

TA贡献1852条经验 获得超7个赞

更新: 所以这是我最终做的:


A = 1

B = 3

C = 1

listOfCharacters = ["A"]*A + ["B"]*B + ["C"]*C

>>> ['A', 'B', 'B', 'B', 'C']

random.seed(1)

random.shuffle(listOfCharacters)

listOfCharacters = ''.join(listOfCharacters)

>>>'BBCAB'

然后我只是用 for 循环遍历 shuffle。


查看完整回答
反对 回复 2021-09-14
  • 3 回答
  • 0 关注
  • 225 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信