【问题标题】:Unordered list generation in pythonpython中的无序列表生成
【发布时间】:2014-04-30 10:37:49
【问题描述】:

我想创建一百万个无序列表,xrange(1, 1000000) 例如给我一个有序列表。我想我需要像 xrange 这样的东西,但是以无序的方式生成它。我想我可以通过循环 random.randint 手动生成一个列表,并进行一些手动检查以保证列表中数字的唯一性,但我认为这会很耗时。有任何想法吗?

【问题讨论】:

  • 这可以通过shuffle 轻松解决,但如果您不想将整个洗牌数组存储在内存中并为其使用随机就地迭代器,事情就会变得棘手。
  • @rr:如果您想确保唯一性,我不确定您是否可以不将数组存储在内存中?
  • @jmetz 我也对此感兴趣。我添加了评论,以便 OP 意识到这个限制,因为他明确使用 xrange 并且显然关心性能。
  • 你需要所有的百万数字吗?如果没有,random.sample(xrange(1, 1000000), n) 可能会起作用

标签: python list python-2.7 unordered


【解决方案1】:
import random
L = range(1, 1000000)
random.shuffle(L)  # shuffles in-place

在 Python3 上,您需要使用

L = list(range(1, 1000000))
random.shuffle(L)  # shuffles in-place

【讨论】:

    【解决方案2】:

    使用 NumPy 中的 random 模块。具体np.random.permutation

    >>> import numpy as np
    >>> np.random.permutation(5)
    array([2, 1, 0, 3, 4])
    

    【讨论】:

      【解决方案3】:

      如果您使用的是numpy,您可以使用permutation

      numpy.random.permutation(10)
      >> array([1, 7, 6, 0, 5, 9, 2, 3, 8, 4])
      

      【讨论】:

        猜你喜欢
        • 2013-10-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-28
        • 2014-03-06
        • 1970-01-01
        • 2011-10-05
        • 1970-01-01
        相关资源
        最近更新 更多