顺序计数器

时间:2016-12-06 02:50:28

标签: python

对于我正在研究的这个项目,我正在编写一种顺序查找四个字母的每个可能组合的方法。我想写一个增加i的循环并将i转换为base 4并替换0,1,2和3。当00不会出现时,我遇到了问题。我想过将i转换为base 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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:-1)

模块itertools。

go func() {
  for _, ch: = range rx.observers {
    ch <-OrderMutation {
      order, "create"
    }
  }
}()

// create a goroutine to send message

    func() {
        orderManagement.createOrder(order)
    }()

    select {
    case val := <-orderManagement.observers["123"]:
        fmt.Println(val)
    }

// then receive on the outside like this