我正在尝试了解groupby的工作方式。实际上,我尝试解决黑客等级问题(“压缩字符串!”)
当我看讨论时,会以书面形式给出答案
from itertools import groupby
print(*[(len(list(c)), int(k)) for k, c in groupby(input())])
,并且有效。据我了解,代码将输入转换为迭代器,因此他遇到并打印了他想要的东西。
但是当我将其转换为
from itertools import groupby
iter = groupby(input())
print(*[(len(list(c)), int(k)) for k, c in iter])
它什么也不打印。我认为这很奇怪,但这主要是由于对自己的了解不足。而且我不太了解python库的解释。
有人可以启发我吗?
谢谢, 高铁(Gautier)
答案 0 :(得分:0)
我想知道您如何运行代码?当我在python3.6中运行代码时,代码就可以了
Python 3.6.5 |Anaconda, Inc.| (default, Mar 29 2018, 13:32:41) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from itertools import groupby
>>> print(*[(len(list(c)), int(k)) for k, c in groupby(input())])
111111232768723648
(6, 1) (1, 2) (1, 3) (1, 2) (1, 7) (1, 6) (1, 8) (1, 7) (1, 2) (1, 3) (1, 6) (1, 4) (1, 8)
>>> from itertools import groupby
>>> iter = groupby(input())
1123512433241231
>>> print(*[(len(list(c)), int(k)) for k, c in iter])
(2, 1) (1, 2) (1, 3) (1, 5) (1, 1) (1, 2) (1, 4) (2, 3) (1, 2) (1, 4) (1, 1) (1, 2) (1, 3) (1, 1)
>>>
答案 1 :(得分:0)
好吧,如果您严格遵循以下命令行:
indice = groupby(input())
112222334411122111
print(*[(len(list(c)), int(k)) for k, c in indice])
它将回答您:
(2, 1) (4, 2) (2, 3) (2, 4) (3, 1) (2, 2) (3, 1)
但是,如果您完全按照以下命令行操作:(紧接答案)
for k in indice :
print(k)
这不会返回任何内容(可能是天真的代码),但是有趣的是,如果您重写代码:
print(*[(len(list(c)), int(k)) for k, c in indice])
它将不返回任何内容
其他有趣的事情:写作
print(*[(len(list(c)), int(k)) for k, c in indice])
两次(重置后)将第二次不返回任何内容(但将第一次返回您想要的内容)。就像groupby函数只能打印一次。这是我会理解的东西。