制作一个无限的自然数列表并粘贴在一起并找到索引 python

Make an infinite list of natural numbers pasted together and find index python

我需要制作一个无限的数字列表并像这样列出它们:

[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

所以用户必须输入一些数字,例如

15 2022年 1410169200 2147483646

我的程序会输出

2 0 1个 2

我现在明白了,我不能使用某种大列表,而是必须进行某种搜索算法?

有人能帮忙吗?

我不得不说这很难:你不能在python中有一个无限列表。 Python 的列表实际上需要存储每个元素。因为没有无限内存的机器,所以没有无限的 python 列表。

但是,您可以做两件事:

  1. 编写一个函数,将自然数(你所说的索引)映射到 (0;10) 中的自然数。编写该函数相当容易。您知道每个长度的位数有多少,因此找到正确的答案实际上并不需要有一个预先生成的列表——它可以为您实际需要的每个索引完成
  2. 您可以使用完全相同的函数来实现 [],尽管这是更高级的 python 功能。

编辑:

绝对不要去大名单!只需编写一个函数,根据用户输入的内容 returns 正确的数字...您知道有 9 个数字有 1 个数字,有 100-10 个数字有两个数字,有 10^3-10^2 个数字有三位数等等。使用普通数学符号在一张纸上写下列表中的位数,您将快速开发出一种方法来获取列表中的第 15001 个数字,而无需计算它之前的所有 15000

我不太明白,你不能列出无穷大,只有chuck norris可以做到! :p 更严重的是,你的命令不能停止,因为无限永远不会停止,所以它是无限循环。 如果你愿意,你可以列出很多数字,例如:

big_list = [i for i in range(10000000)]

但恐怕你不能做得更好...

除了有限中无穷大的明显问题 space 这可能就是您想要的。

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')

但它只会达到内存限制并崩溃。

你可以用 generator 做这种事情。看下面带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()

这段代码只存储了一个大字符串。如果您要寻找一个非常高的索引号,您可能想要找到一些其他方法来计算字符数。然后您可以丢弃目标之前的字符,而不必担心存储潜在的 巨大 字符串。