【问题标题】:A sequential counter顺序计数器
【发布时间】:2016-12-06 11:16:12
【问题描述】:

对于我正在进行的这个项目,我正在编写一种方法来按顺序查找四个字母的所有可能组合。我考虑编写一个循环来增加 i 并将 i 转换为四进制并替换 0、1、2 和 3。当 00 不会出现时,我遇到了问题。我考虑将 i 转换为基数 5 并忽略每次出现的 0,并替换 1、2、3 和 4。它确实对我有用,但问题是它不是很有效。

这是我目前最好的代码:

import string
digs = string.digits + string.letters
def int2base(x, base):
    if x < 0: sign = -1
    elif x == 0: return digs[0]
    else: sign = 1
    x *= sign
    digits = []
    while x:
        digits.append(digs[x % base])
        x /= base
    if sign < 0:
        digits.append('-')
    digits.reverse()
    return ''.join(digits)
for i in range(0,1000):
    x=i
    x=int2base(x, 5)
    if str(x).count("0")==0:
        print(i)

有什么方法可以修复它,以便打印它打印的内容,但我只需要将 i 插入一个函数? 输入输出示例

0 -> a
1 -> b
2 -> c
3 -> d
4 -> aa
5 -> ab
6 -> ac
7 -> ad
8 -> ba
9 -> bb
10 -> bc
11 -> bd
12 -> ca
13 -> cb
14 -> cc
15 -> cd
16 -> da
17 -> db
18 -> dc
19 -> dd
20 -> aaa
21 -> aab

【问题讨论】:

  • 您能否提供示例输入和输出,以便我确定您是在寻找组合、排列还是产品?
  • @TigerhawkT3 当然,我编辑了我的帖子并添加了一些示例

标签: python


【解决方案1】:

您想要电子表格的列号:Get Excel-Style Column Names from Column Number

以下内容基于对该问题的回答:

digits = 'abcd'

def column(n):
    result = []
    while n:
        n, rem = divmod(n-1, len(digits))
        result.append(digits[rem])
    return ''.join(reversed(result))

当使用导致请求的输出时:

>>> for i in range(22):
...     print i, '->', column(i+1)
... 
0 -> a
1 -> b
2 -> c
3 -> d
4 -> aa
5 -> ab
6 -> ac
7 -> ad
8 -> ba
9 -> bb
10 -> bc
11 -> bd
12 -> ca
13 -> cb
14 -> cc
15 -> cd
16 -> da
17 -> db
18 -> dc
19 -> dd
20 -> aaa
21 -> aab

【讨论】:

    【解决方案2】:

    模块迭代工具。

    import itertools
    
    for acombo in itertools.product('ABCD', repeat=4):
        print acombo
    

    【讨论】:

    • 这与所需的样本输出不匹配。
    猜你喜欢
    • 1970-01-01
    • 2021-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-11
    • 2019-10-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多