相关疑难解决方法(0)

Python的缺乏排序可以被认为是随机顺序吗?

我想知道Python内置set结构的元素排序是否"足够随机".例如,取一个集合的迭代器,它可以被视为其元素的混乱视图吗?

(如果重要的话,我在Windows主机上运行Python 2.6.5.)

python random shuffle set

13
推荐指数
4
解决办法
2156
查看次数

random.choice 被字典破坏

输入random.choice应该是一个序列。这会导致 a 出现奇怪的行为dict,它不是序列类型,但可以像下面这样使用下标:

>>> d = {0: 'spam', 1: 'eggs', 3: 'potato'}
>>> random.choice(d)
'spam'
>>> random.choice(d)
'eggs'
>>> random.choice(d)
'spam'
>>> random.choice(d)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/random.py", line 274, in choice
    return seq[int(self.random() * len(seq))]  # raises IndexError if seq is empty
KeyError: 2
Run Code Online (Sandbox Code Playgroud)

此外,random.choice它根本不适用于setcollections模块中的其他一些容器。

有充分的理由吗random.choice(d)不应该以明显的方式工作,返回随机密钥?

我考虑过random.choice(list(d))random.sample(d, 1)[0]但希望有更有效的方法。可以random.choice在不降低序列当前行为的情况下进行改进吗?

python random dictionary

6
推荐指数
1
解决办法
1774
查看次数

具有O(1)随机删除的数据结构并添加用于改组生成器顺序

我需要一个数据结构,允许您添加元素并O(1)及时随机删除它们.

这样做的原因是我需要从生成器中移植数据,但由于大小的原因,我无法同时将所有内容加载到内存中.

这是一个使用示例,它自动混合生成器表达式生成的结果的顺序,而不将所有内容加载到内存中:

def generator_shuffler(generator)
    a = magical_data_structure_described_above
    for i in generator:
        a.add(i)
        if len(a) > 10: yield a.poprandom()
Run Code Online (Sandbox Code Playgroud)

最初我尝试了一个python set(),但是从这里开始:Set.pop()不是随机的?,似乎set()实际上并没有以任意顺序删除项目.如何使用上述用法实现数据结构?

python algorithm data-structures python-3.x

0
推荐指数
1
解决办法
68
查看次数