我需要制作一个无限的数字列表,并像这样列出它们:
[12345678910111213141516171819...]
或
[1,2,3,4,5,6,7,8,9,1,1,1,2,1,3,1,4,1,5,1,6,1,7,1,8,1,8,9....]
以便将数字粘贴在一起并可以单独索引(找到数字的位置,例如15th
数字将是2
)
因此,用户必须输入一些数字,如
15202214101692002147483646
我的程序会输出
201.2
我现在明白了,我不能使用某种大列表,但必须制定某种搜索算法?
有人能帮忙吗?
您可以使用生成器来完成这类操作。查看下面带有yield
的函数。
def natural_numbers():
n = 0
while True:
n += 1
yield n
def find_nth_character(n):
numbers = ""
gen = natural_numbers()
while len(numbers) < n:
numbers += str(gen.next())
print numbers
return numbers[n-1]
def main():
print find_nth_character(15)
if __name__ == '__main__':
main()
这段代码只存储一个大字符串。如果您要寻找一个非常高的索引号,您可能需要找到其他计算字符数的方法。然后,您可以丢弃目标之前的字符,并且不必担心存储潜在的巨大字符串。
我不确定是否理解,你不能列出无穷大,只有chuck norris可以做到!:p更严重的是,你的命令不能停止,因为无穷大永远不会停止,所以它是无限循环。如果你想,你可以列出很多数字,例如:
big_list = [i for i in range(10000000)]
但恐怕你做得再好不过了。。。
我不得不说,尽管这很难:您不能在python中拥有无限列表。Python的列表实际上需要每个元素的存储空间。既然没有内存无限的机器,就没有无限的python列表。
然而,可以做两件事:
- 编写一个函数,将自然数(您称之为索引)映射到(0;10)中的自然数。编写该函数相当容易。你知道每个长度的数字有多少,所以找到正确的答案实际上并不需要预先生成列表——它可以针对你实际需要的每个索引来完成
- 您可以使用同样的函数来实现
[]
,尽管这在某种程度上是一个更高级的python功能
编辑:
绝对不要追求庞大的清单!只需编写一个函数,根据用户输入的内容返回正确的数字。。。你知道有9个数字有1位,有100-10个数字有2位,有10^3-10^2个数字有3位,等等。用普通数学符号在一张纸上写下你列表中的数字,你会很快开发出一种方法来获得列表中的第15001位,而不必计算出之前的所有15000位
除了有限空间中无穷大的明显问题之外,这可能就是您想要的。
list = []
for x in xrange(100): # You could put any number you want until you hit memory limit
var = 'stored data ' + str(x**2) # stores text and a math function
list.append(var) # Append simply adds current value to the end of the list
print list[x] #prints your value for debug purposes
这将创建一个包含所有所需交互数据的索引列表,只需键入即可获得索引数据
print list[5] # or whatever number you want. You could also loop through it
for n in xrange(len(list) / 4): print list[x*4] # prints every fourth value
while版本为:
x = 10
while x == 10: list.append('your data')
但它只会达到内存限制并崩溃。