Python-创建一个升序整数

Python-创建一个升序整数,python,Python,有人能提醒我如何根据给定的数字创建一个升序的整数吗 例如: y(3) -> 123 y(5) -> 12345 y(8) -> 12345678 谢谢您可以创建一个范围,然后在返回整数之前将数字附加到字符串: def y(size): mynum = "" for num in range(1, size+1): mynum += str(num) return int(mynum) print("Number is %d" % y(

有人能提醒我如何根据给定的数字创建一个升序的整数吗

例如:

y(3) -> 123
y(5) -> 12345
y(8) -> 12345678

谢谢

您可以创建一个范围,然后在返回整数之前将数字附加到字符串:

def y(size):
    mynum = ""
    for num in range(1, size+1):
        mynum += str(num)
    return int(mynum)

print("Number is %d" % y(8))
def y(size):
    return int(''.join(str(value)
                       for value in range(1, size + 1)))
def y(size):
    return int(''.join(map(str, range(1, size + 1))))
这是针对Python3的。Python 2不需要为
print
函数添加括号。

defy(n):
def y(n):
    if n<=0:
        return n
    return int("".join(str(a) for a in range(1,n+1)))

如果n您不需要执行其他答案建议的任何字符串操作;您可以从1到
x
,重复将结果乘以10并添加当前值:

def y(x):
    result = 0
    for i in range(1, x + 1):
        result = result * 10 + i
    return result
递归定义使该算法相当简洁:

def y(x):
    return 0 if x <= 0 else y(x - 1) * 10 + x
defy(x):

如果x可以将一个空字符串与范围内的每个数字联接,则返回0,然后转换为整数:

def y(size):
    mynum = ""
    for num in range(1, size+1):
        mynum += str(num)
    return int(mynum)

print("Number is %d" % y(8))
def y(size):
    return int(''.join(str(value)
                       for value in range(1, size + 1)))
def y(size):
    return int(''.join(map(str, range(1, size + 1))))
您可以重复乘以10,将范围内的每个数字相加:

def y(size):
    return reduce((lambda total, digit: (total * 10) + digit),
                  range(1, size + 1))
您可以将字符串构造函数映射到范围内的每个数字,并将它们连接在一起,然后转换为整数:

def y(size):
    mynum = ""
    for num in range(1, size+1):
        mynum += str(num)
    return int(mynum)

print("Number is %d" % y(8))
def y(size):
    return int(''.join(str(value)
                       for value in range(1, size + 1)))
def y(size):
    return int(''.join(map(str, range(1, size + 1))))

显然,还有许多其他方法,但这些方法非常简洁。

对于1到10范围内的值,如何:

def y(size):
    return 1234567890 / (10**(10-size))

for size in range(1,11):
    print y(size)
给出:

1
12
123
1234
12345
123456
1234567
12345678
123456789
1234567890
作为另一种思考方式,请尝试:

def y(size):
    return int("1234567890"[:size])

请展示您迄今为止所做的努力。@RobertH我想他是想问stackoverflow:^)如果我记得正确,应该是一个内置函数,它返回x到y的数字。类似于{print[x:y:1]}@Assafbaruch的东西,
range
就是这样做的。为什么你希望
[x:y:1]
除了一个
语法错误之外还能做任何事情呢?
?缩写:
int('''.join(map(str,range(n+1))[1:])或n)
@bufh awesome yes将尝试tell@bufh为什么不
int('''.join(map(str,range(1,n+1)))
?@PeterWood谈论切片:哦,真的没有理由,只是为了好玩(^ ^)否则,
或n
支持一个括号下的值是不必要的,即,
连接(str(a)表示范围内的(1,n+1))
。这是一个生成器理解,而不是列表理解。通过使其递归,您可以节省一点堆内存,以换取增加的堆栈内存。不过,如果您想避免创建字符串对象,这也很有效。如果
0
9
上的值不适用于
y
@bufh:如果它应该返回整数,那么
y
如何定义0(即没有数字)和值>9?您不能有零位数的整数。@FrerichRaabe您可以有一个空字符串,就像其他字符串操作一样;^)好吧,所以我建议
int('123456789'[:x])
,它保存了堆栈、递归,并且是最短的(而且速度是不相关的两倍;^)优雅,而且是最快的;我没想到这么多的手术会比切片快,好极了。事实上。。。已更新。我认为此函数对于
size=10
没有合理的定义,因为
…890
不再升序。在10垒9点后没有任何东西。