【发布时间】:2013-11-06 23:30:20
【问题描述】:
我想创建一个给定两个输入的列表,并且在不能有任何重复的条件下。该列表应包含随机的数字序列。那么列表中的数字就是正整数。
输入1:列表长度(var
samples)输入2:列表的最大数(var
end)
我知道如何执行此操作,但我希望列表包含大量数字、100 万个或更多数字。
我自己创建了两种方法来解决这个问题,它们都有自己的问题,其中一个是slow,另一个产生一个MemoryError。
方法一,MemoryError:
import random
def create_lst_rand_int(end, samples):
if samples > end:
print('You cannot create this list')
else:
lst = []
lst_possible_values = range(0, end)
for item in range(0, samples):
random_choice = random.choice(lst_possible_values)
lst_possible_values.remove(random_choice)
lst.append(random_choice)
return lst
print create_lst_rand_int(1000000000000, 100000000001)
方法二,slow:
import random
def lst_rand_int(end, samples):
lst = []
# lst cannot exist under these conditions
if samples > end:
print('List must be longer or equal to the highest value')
else:
while len(lst) < samples:
random_int = random.randint(0, end)
if not random_int in lst:
lst.append(random_int)
return lst
print lst_rand_int(1000000000000, 100000000001)
由于我的两种方法都不能很好地工作(方法 1 确实比方法 2 更好),我想知道如何创建一个更好地满足我的要求的列表。
【问题讨论】:
-
列表需要在内存中吗?
-
我只需要一个存储在某个地方的列表,以便以后可以轻松访问它。我非常希望它不在外部文件中。
-
查看所有这些零:如果我没有搞砸我的计算,那么这个列表至少有 3725 GB。你有这么多记忆吗?
-
我有 4gb 内存,200gb 硬盘。
-
在我的系统上,Python 整数是 24 字节(由
sys.getsizeof报告)。该帖子要求 100000000001 个整数,这需要 2400000000024 个字节。那是 2235.17 GB(使用 Google 进行方便的转换),或大约 2 TB。这永远不会接近在列出的机器上工作。
标签: python algorithm python-2.7 random int