Python命令组合数字?

 清新之乄风666 发布于 2023-02-13 12:49

我期待写一些能显示所有可能组合的有序列表的东西.它可以从类似的东西开始

11-AA 11-AB 11-AC

......并最终以......结束

59-YZ 59-ZZ

如果数字的第一部分只能在1-5之间,我也会喜欢它.我一直在使用itertools,但我很难生成这种特定的东西.我可以生成重复两次的4个字母的所有可能组合,但是我遇到问题,并告诉程序"嘿,你只能选择1到4之间的第一个数字".

import itertools

perms = itertools.product('ABCD', repeat=2)

for perm in perms:
    print('The possible combinations are', perm)

有代码.这不是必须使用itertools,这正是我熟悉的.

编辑:第一个答案正是我需要的.因为逗号,我不喜欢itertools正在做的事情,但你给我看的小片段是魔术.谢谢.

要回答这个问题,循环似乎不太干净?我也刚刚发现了itertools,我可能太喜欢了.

1 个回答
  • 只是以相同的方式做到这一点.一个字符必须是1,2,3,4,或5; 第二个可以是任何数字; 第三必须是-,最后两个必须是A,B,C,或D,所以:

    perms = itertools.product('12345', '0123456789', '-', 'ABCD', 'ABCD')
    

    然后,将它们加入到字符串中:

    print('The possible combinations are:')
    for perm in perms:
        print(''.join(perm))
    

    这开始于10-AA,而不是11-AA.59如果你开始就没有办法结束11(假设你想要按顺序排列数字).


    我最初离开了-外面并加入了每个字符串format,但我认为这个速度较慢.在我使用的每个Python版本上,它的速度至少要快两倍.(在C 1长度的套环的成本是微不足道的,因为是建立一个5元组对4元组;的成本formatjoin不).

    你也可以product用a range(11, 60)和a product('ABCD', repeat=2),然后将它压扁chain,然后format每一个.虽然这是概念上比较简单,这将是一个很多难以阅读,并即将为扁平慢format版本.

    无论如何,在OS X 10.9上的64位python.org 3.3.2中:

    In [1189]: %timeit collections.deque((''.join(perm) for perm in itertools.product('1234', '1234567890', '-', 'ABCD', 'ABCD')), maxlen=0)
    10000 loops, best of 3: 129 µs per loop
    
    In [1190]: %timeit collections.deque(('{}{}-{}{}'.format(*perm) for perm in itertools.product('1234', '1234567890', 'ABCD', 'ABCD')), maxlen=0)
    1000 loops, best of 3: 359 µs per loop
    

    2023-02-13 12:51 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有