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点后没有任何东西。