如何根据python

时间:2015-07-27 12:13:05

标签: regex python-2.7

我必须根据模式生成整数 例如,我必须生成所有数字仅包含4和0 ,并且以一个或多个4开头,以0或0结尾(最多30位数字)结束 我只想要Python(2.7)中的代码。我不想检查模式。我想在模式中生成数字

4 个答案:

答案 0 :(得分:1)

假设你关于4和0的评论只是一个例子而且你真的想要一个“基于模式生成整数”的通用解决方案,我建议使用regex生成器系列库中的字符串。这是python的一个:https://github.com/asciimoo/exrex

如自述文件中所示,您可以执行以下操作:

import exrex
(int(n) for n in exrex.generate('4+0*'))

答案 1 :(得分:0)

你的问题是低调的。您的模式中有无限数字,因此您无法将它们全部列出。为了表明你的问题应该如何改进,我会以一种可能不是你想要的方式回答你的问题,但满足要求。

您的模式可以写为4[40]*4+形式的无限数字满足您的模式。由于你永远不会完成这些数字,只输出那些数字的生成器满足你的条件(你不能所有但你可以有许多数字)。

from itertools import count, islice
numbers = (int('4' * i) for i in count(1))

# get 10 numbers
print list(islice(numbers, 10))
# [4, 44, 444, 4444, 44444, 444444, 4444444, 44444444, 444444444, 4444444444]

故事的道德:在寻求解决方案之前,你应该先了解你的问题。

答案 2 :(得分:0)

这应该有效:

[int("4"*i + "0"*(n-i)) for n in range(0,31) for i in range(1,n+1)]

它生成465个不同的整数:

4, 40, 44, 400, 440, ..., 444444444444444444444444444440, 444444444444444444444444444444

On Edit:递归方法适用于更一般的情况:

def multiRepeats(chars,n,initial = True):
    strings = []
    if len(chars) == 0 or n == 0: return [""]
    c = chars[0]
    rest = chars[1:]
    base = 1 if initial else 0
    for i in range(base,n+1):
        head = c * i
        strings.extend([head + tail for tail in multiRepeats(rest,n-i,False)])
    return strings

def digitRepeats(digitString,n):
    return sorted([int(s) for s in multiRepeats(digitString,n)])

例如

>>> digitRepeats("420",4)
[4, 40, 42, 44, 400, 420, 422, 440, 442, 444, 4000, 4200, 4220, 4222, 4400, 4420, 4422, 4440, 4442, 4444]

要回答您的原始帖子,请评估digitRepeats("40",30)

答案 3 :(得分:0)

生成满足您的模式的所有数字:

def mygen():
    i = 1
    while True:
        # turn to binary, skip '0b' then change 1s to 4s and
        # finally turn it back to int
        yield int(bin(i)[2:].replace('1','4'))
        i += 1

因为你基本上只有两位数字' 4'和' 0'您可以使用二进制表示来获得所有可能的结果 请注意,此生成器无限运行!
要获得前100个数字,请使用它:

gen = mygen()
first100 = [next(gen) for _ in xrange(100)]