代码之家  ›  专栏  ›  技术社区  ›  Hai-Anh Trinh

什么是python itertools的ruby等价物,特别是组合/置换/groupby?

  •  13
  • Hai-Anh Trinh  · 技术社区  · 16 年前

    蟒蛇 itertools 模块在使用生成器处理iterable/迭代器方面提供了许多优点。例如,

    permutations(range(3)) --> 012 021 102 120 201 210
    
    combinations('ABCD', 2) --> AB AC AD BC BD CD
    
    [list(g) for k, g in groupby('AAAABBBCCD')] --> AAAA BBB CC D
    

    在ruby中等价物是什么?

    等价地说,我的意思是快速和内存高效(python的itertools模块是用c编写的)。

    1 回复  |  直到 15 年前
        1
  •  18
  •   sepp2k    15 年前

    Array#permutation , Array#combination Enumerable#group_by 从1.8.7开始用ruby定义。如果您使用的是1.8.6,则可以从facets或active_support或 backports .

    示例用法:

    [0,1,2].permutation.to_a
    #=> [[0, 1, 2], [0, 2, 1], [1, 0, 2], [1, 2, 0], [2, 0, 1], [2, 1, 0]]
    
    [0,1,2,3].combination(2).to_a
    #=> [[0, 1], [0, 2], [0, 3], [1, 2], [1, 3], [2, 3]]
    
    [0,0,0,1,1,2].group_by {|x| x}.map {|k,v| v}
    #=> [[0, 0, 0], [1, 1], [2]]
    
    [0,1,2,3].group_by {|x| x%2}
    #=> {0=>[0, 2], 1=>[1, 3]}
    
    推荐文章