生成一个没有重复项的大列表

2024-04-23 07:00:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我想创建一个包含20000点的大列表,形式如下:

[[x, y], [x, y], [x, y]]

其中x和y可以是0到1000之间的任意随机整数。我怎样才能做到这一点,这样就没有重复的坐标[x,y]?在


Tags: 列表整数形式
3条回答

由于n = 1001在您的例子中相对较小,^{}就可以了,从可能对的空间中随机抽取20000对(没有重复):

import random
print random.sample([[x, y] for x in xrange(1001) for y in xrange(1001)], 20000)

这是最简洁易读的解决方案。(但是如果n非常大,生成整个点空间的计算效率将不高。)

你可以使用while循环来填充它直到它足够大:

>>> from random import randint
>>> n, N = 1000, 20000
>>> points = {(randint(0, n), randint(0, n)) for i in xrange(N)}
>>> while len(points) < N:
...     points |= {(randint(0, n), randint(0, n))}
...     
>>> points = list(list(x) for x in points)

您最初的想法可能很慢,因为它是迭代检查containmentship的列表,即O(n)。它使用速度更快的集合,最后只转换为列表结构一次。在

试试这个:

import itertools
x = range(0,10)
aList =[]
for pair in itertools.combinations(x,2):
    for i in range(0,10):
        aList.append(pair)
print aList

如果你想要一个0-10之间的点,所有唯一的都存储在一个列表中, 或者你需要它的随机顺序,然后使用一些随机函数。在

相关问题 更多 >