Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 生成无重复点的大型点列表_Python_List_Random_Points - Fatal编程技术网

Python 生成无重复点的大型点列表

Python 生成无重复点的大型点列表,python,list,random,points,Python,List,Random,Points,我想创建一个包含20000个点的大列表,格式如下: [[x, y], [x, y], [x, y]] 其中x和y可以是0到1000之间的任意随机整数。我怎样才能做到不存在重复的坐标[x,y]?您可以使用while循环来填充它,直到它足够大: >>> from random import randint >>> n, N = 1000, 20000 >>> points = {(randint(0, n), randint(0, n)) fo

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

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

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

您可以使用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)
来自随机导入randint的
>>
>>>n,n=100020000
>>>点={(randint(0,n),randint(0,n))对于xrange(n)中的i}
>>>而len(点)>>点=列表(列表(x)表示x英寸点)
您最初的想法可能很慢,因为它是为了检查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之间,且所有点都是唯一的并存储在列表中,
或者你需要它的随机顺序,然后使用一些随机函数

由于
n=1001
在您的情况下相对较小,因此可以从可能的对中随机抽取20000对(无重复):


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

一种避免
循环时使用未知迭代计数并避免在内存中存储巨大的
列表的方法将用于从单个
范围生成唯一的编码值(在Py3中)或者
xrange
(在Py2中)以避免实际生成大量临时数据;一个简单的数学运算可以将“编码”值拆分回两个值:

import random
xys = random.sample(range(1001 * 1001), 20000)
[divmod(xy, 1001) for xy in xys] # Wrap divmod in list() if you must have list, not tuple

您需要列表中的随机元素吗?请尝试:创建坐标对时,请在添加列表之前对列表进行比较,看看它是否存在。。。它们是整数吗?是的,整数,我尝试将其添加到列表中,然后进行检查,但它会冻结,因为我认为每次都要检查列表时可能会太慢?@InNoam谢谢,我将根据您的问题尝试一种简单的方法。您的回答将不胜感激
import random
xys = random.sample(range(1001 * 1001), 20000)
[divmod(xy, 1001) for xy in xys] # Wrap divmod in list() if you must have list, not tuple