我有一个2D列表,我需要从这个2D列表中选择n不同的随机点(x,y坐标)。让我先写一下我试图解决这个问题时所发生的事情。
假设网格是300 x 400。
300 x 400是否获得了120000元素的列表,而不是使用random.choice (大型网格慢)我搜索了一些类似的问题,没有一个是直接解决问题的。我确实找到了This question,尽管用户回答了这个问题,但是他们没有提供一个Python解决方案,我们在这里可以在这个问题中给出这个解决方案。也许可以建议在Python标准库中使用适当的数据结构,如果不是代码本身的话。
发布于 2017-02-07 02:31:11
使用random.sample进行示例,而不需要从范围中替换--对于range对象有一个快速的特例。divmod(i, h)是i在一维范围内与w * h元素映射到2D网格中的(x, y)的词典学映射。
Python 3:
import random
def samplegrid(w, h, n):
return [divmod(i, h) for i in random.sample(range(w * h), n)]Python 2:
import random
def samplegrid(w, h, n):
return [divmod(i, h) for i in random.sample(xrange(w * h), n)]https://stackoverflow.com/questions/42080607
复制相似问题