代码之家  ›  专栏  ›  技术社区  ›  badner

逐行获取字符串的组合

  •  0
  • badner  · 技术社区  · 8 年前

    我的数据如下:

    aa aa aa aa aa
    ab ac aa ad ae
    aa ab af ae ag
    

    aa aa aa aa aa aa aa aa aa aa ...
    ab ac aa ad ae ae ab ac aa ad ...
    aa ab af ae ag aa ab af ae ag...
    

    我试过itertools,但似乎找不到合适的工具。有人知道怎么做吗?

    这是我迄今为止尝试过的:

    for x in new_lines:
        for a,b,c,d,e,f,g,h,i,j in permutations(x.split(), 10):
            print '{} {} {} {} {} {} {} {} {} {}'.format(a.rstrip('\n'), b.rstrip('\n'), c.rstrip('\n'), d.rstrip('\n'), e.rstrip('\n'), f.rstrip('\n'), g.rstrip('\n'), h.rstrip('\n'), i.rstrip('\n'), j.rstrip('\n'))
    
    1 回复  |  直到 8 年前
        1
  •  1
  •   pylang    8 年前

    看起来你想要三元组组合,替换字符串 "aa ab ac ad ae af ag" ,不包括所有元素相等的条目。

    密码

    import itertools as it
    
    
    iterable = "aa ab ac ad ae af ag".split()
    
    combs = it.combinations_with_replacement(iterable, 3)
    pred = lambda x: len(set(x)) != 1
    results = list(filter(pred, combs))
    transposed = list(zip(*results))
    

    演示

    >>> for line in transposed:
    ...     print(line)
    ('aa', 'aa', 'aa', 'aa', 'aa', 'aa', 'aa', 'aa', 'aa', 'aa', 'aa', ...)
    ('aa', 'aa', 'aa', 'aa', 'aa', 'aa', 'ab', 'ab', 'ab', 'ab', 'ab', ...)
    ('ab', 'ac', 'ad', 'ae', 'af', 'ag', 'ab', 'ac', 'ad', 'ae', 'af', ...)
    

    选项

    您可以将此代码简化为一行生成器:

    transposed = zip(*(i for i in it.combinations_with_replacement(iterable, 3) if len(set(i)) != 1))
    
    推荐文章