制作一个无限的自然数列表并粘贴在一起并找到索引 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 列表。
但是,您可以做两件事:
- 编写一个函数,将自然数(你所说的索引)映射到 (0;10) 中的自然数。编写该函数相当容易。您知道每个长度的位数有多少,因此找到正确的答案实际上并不需要有一个预先生成的列表——它可以为您实际需要的每个索引完成
- 您可以使用完全相同的函数来实现
[]
,尽管这是更高级的 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()
这段代码只存储了一个大字符串。如果您要寻找一个非常高的索引号,您可能想要找到一些其他方法来计算字符数。然后您可以丢弃目标之前的字符,而不必担心存储潜在的 巨大 字符串。
我需要制作一个无限的数字列表并像这样列出它们:
[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 列表。
但是,您可以做两件事:
- 编写一个函数,将自然数(你所说的索引)映射到 (0;10) 中的自然数。编写该函数相当容易。您知道每个长度的位数有多少,因此找到正确的答案实际上并不需要有一个预先生成的列表——它可以为您实际需要的每个索引完成
- 您可以使用完全相同的函数来实现
[]
,尽管这是更高级的 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()
这段代码只存储了一个大字符串。如果您要寻找一个非常高的索引号,您可能想要找到一些其他方法来计算字符数。然后您可以丢弃目标之前的字符,而不必担心存储潜在的 巨大 字符串。