在重复迭代期间更有效的改组

托马斯·约翰逊

我需要遍历列表任意次数,yield以随机顺序(每次遍历完整列表时的顺序不同)对列表的每个元素进行迭代。在第二次产生该元素之前,我需要产生每个元素一次,在第三次产生该元素之前,产生每个元素两次,等等。

目前,我的代码如下所示:

def random_yield(data):
  random.shuffle(data)
  data_index = 0
  while True:
    yield data[data_index]
    data_index += 1

    if data_index == len(data):
      random.shuffle(data)
      data_index = 0

有没有办法更有效地做到这一点,所以我不支付random.shuffle()after every len(data) yields的性能损失

您可以在每次迭代中执行一次 Fisher-Yates shuffle,从而在每次迭代中平均分配成本。这并不是更有效——事实上,它可能效率更低,因为库函数可能比 Python 代码更快——但它避免了长时间的停顿。

该代码与每次只抓取一个随机元素没有太大区别。唯一的区别是您从向量的子集中获取随机元素:

from random import randrange
def random_yield(data):
  index = 0
  limit = len(data)
  while True:
    if index + 1 >= limit:
      yield data[index]
      index = 0
    else:
      # Get a random element which we haven't yet used this cycle
      # (This is a single iteration of the F-Y shuffle algorithm)
      j = randrange(index, limit)
      rv = data[j]
      yield rv
      # Swap the element we just selected so its not in the next subrange
      data[j] = data[index]
      data[index] = rv
      index += 1

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

更有效的迭代方法

来自分类Dev

迭代groupby Pandas数据框的更有效方法?

来自分类Dev

迭代多个列表/字典的更有效方法?

来自分类Dev

更有效的方法,而不是使用重复的if语句

来自分类Dev

哪种方法查找重复的整数更有效?

来自分类Dev

哪种方法查找重复的整数更有效?

来自分类Dev

哪个更有效?

来自分类Dev

使循环更有效

来自分类Dev

更有效的循环

来自分类Dev

使循环更有效

来自分类Dev

有没有更有效的方法来重构Ruby上哈希的迭代?

来自分类Dev

BLE 连接建立期间的功耗:哪个角色(外围/中央)更有效?

来自分类Dev

当打印出树中的所有节点时,递归或迭代是否更有效?

来自分类Dev

在 VBa 中迭代行时,如何使带有 If 语句的 For 循环更有效?

来自分类Dev

有没有更有效的匹配版本来搜索重复的数字排列?

来自分类Dev

有没有更有效的方式来处理重复功能?

来自分类Dev

查找两个可迭代对象共享的匹配值数量的更有效方法?

来自分类Dev

什么是更有效的迭代列表并调用函数或将列表传递给函数

来自分类Dev

什么是迭代嵌套对象集合的更干净或更有效的方法

来自分类Dev

有更有效的方法吗?

来自分类Dev

更有效地将匹配列与data.table中的重复项合并

来自分类Dev

更有效地将匹配列与data.table中的重复项合并

来自分类Dev

从SQL Server表中删除重复行的更简单,更有效的方法

来自分类Dev

如何使算法在Java中的集合中查找重复的对象更有效?

来自分类Dev

PowerShell,查找重复文件夹的更有效方法

来自分类Dev

创建对象或重复调用访问器是否更有效?

来自分类Dev

从SQL Server表中删除重复行的更简单,更有效的方法

来自分类Dev

在 Javascript 中查找重复对象或数组的更有效解决方案?

来自分类Dev

执行更有效的COUNT

Related 相关文章

  1. 1

    更有效的迭代方法

  2. 2

    迭代groupby Pandas数据框的更有效方法?

  3. 3

    迭代多个列表/字典的更有效方法?

  4. 4

    更有效的方法,而不是使用重复的if语句

  5. 5

    哪种方法查找重复的整数更有效?

  6. 6

    哪种方法查找重复的整数更有效?

  7. 7

    哪个更有效?

  8. 8

    使循环更有效

  9. 9

    更有效的循环

  10. 10

    使循环更有效

  11. 11

    有没有更有效的方法来重构Ruby上哈希的迭代?

  12. 12

    BLE 连接建立期间的功耗:哪个角色(外围/中央)更有效?

  13. 13

    当打印出树中的所有节点时,递归或迭代是否更有效?

  14. 14

    在 VBa 中迭代行时,如何使带有 If 语句的 For 循环更有效?

  15. 15

    有没有更有效的匹配版本来搜索重复的数字排列?

  16. 16

    有没有更有效的方式来处理重复功能?

  17. 17

    查找两个可迭代对象共享的匹配值数量的更有效方法?

  18. 18

    什么是更有效的迭代列表并调用函数或将列表传递给函数

  19. 19

    什么是迭代嵌套对象集合的更干净或更有效的方法

  20. 20

    有更有效的方法吗?

  21. 21

    更有效地将匹配列与data.table中的重复项合并

  22. 22

    更有效地将匹配列与data.table中的重复项合并

  23. 23

    从SQL Server表中删除重复行的更简单,更有效的方法

  24. 24

    如何使算法在Java中的集合中查找重复的对象更有效?

  25. 25

    PowerShell,查找重复文件夹的更有效方法

  26. 26

    创建对象或重复调用访问器是否更有效?

  27. 27

    从SQL Server表中删除重复行的更简单,更有效的方法

  28. 28

    在 Javascript 中查找重复对象或数组的更有效解决方案?

  29. 29

    执行更有效的COUNT

热门标签

归档