【问题标题】:Groupby object disappears after list operation列表操作后Groupby对象消失
【发布时间】:2019-06-28 03:22:54
【问题描述】:

我正在尝试运行长度编码问题,在运行 groupby & list 操作后,我的 groupby 对象不知何故消失了。

import itertools
s = 'AAAABBBCCDAA'
for c, group in itertools.groupby(s):
    print(list(group))
    print(list(group))

我的输出是

['A', 'A', 'A', 'A']
[]
['B', 'B', 'B']
[]
['C', 'C']
[]
['D']
[]
['A', 'A']
[]

所以对于每个循环,2 个打印命令会产生不同的结果。

谁能帮忙解释我做错了什么?

【问题讨论】:

    标签: python run-length-encoding


    【解决方案1】:

    因为那里有发电机,用了之后就没了:

    >>> a = iter([1, 2, 3])
    >>> list(a)
    [1, 2, 3]
    >>> list(a)
    []
    

    保留它们:

    import itertools
    s = 'AAAABBBCCDAA'
    for c, group in itertools.groupby(s):
        l = list(group)
        print(l)
        print(l)
    

    输出:

    ['A', 'A', 'A', 'A']
    ['A', 'A', 'A', 'A']
    ['B', 'B', 'B']
    ['B', 'B', 'B']
    ['C', 'C']
    ['C', 'C']
    ['D']
    ['D']
    ['A', 'A']
    ['A', 'A']
    

    【讨论】:

    • 伟大的示范!
    【解决方案2】:

    groupby 函数返回一个迭代器,该迭代器在您调用 list(group) 时使用。

    “返回的组本身就是一个迭代器,它与 groupby() 共享底层的可迭代对象。因为源是共享的,所以当 groupby() 对象前进时,前一个组不再可见。” docs.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多