Python iterpools.groupby(str):list(g)将在'if'语句中更改
作为一个新手,我试着练习groupby的功能并看到结果。然而,我发现了一个奇怪的现象Python iterpools.groupby(str):list(g)将在'if'语句中更改,python,Python,作为一个新手,我试着练习groupby的功能并看到结果。然而,我发现了一个奇怪的现象 str = 'hieeelalaooo' for k, g in groupby(str): print(list(k), list(g)) if True: print(list(k), list(g)) 结果显示,listg将在“if”语句中更改,如下所示: `['h'] ['h'] ['h'] [] ['i'] ['i'] [
str = 'hieeelalaooo'
for k, g in groupby(str):
print(list(k), list(g))
if True:
print(list(k), list(g))
结果显示,listg将在“if”语句中更改,如下所示:
`['h'] ['h']
['h'] []
['i'] ['i']
['i'] []
['e'] ['e', 'e', 'e']
['e'] []
....`
我就是搞不懂。依我的直觉,listg应该保持不变,而不是变成一个空列表。有人能解释一下这种变化的基本逻辑吗?非常感谢您的帮助。发生这种情况的原因是g是一个迭代器,即groupby通过yield语句返回g的值。一旦您使用了该值,它就消失了,除非您将其分配给另一个变量,这是因为它不会将生成的值保留在内存中 您可以这样做:
str = 'hieeelalaooo'
for k, g in groupby(str):
k_ = k
g_ = g
print(list(k_), list(g_))
if True:
print(list(k_), list(g_))
有关更多信息,请查看:在文档之后,变量的内容在生成后被释放。因此,如果你想保留这些值,你必须将它们存储在另一个变量中。g是一个迭代器,这意味着它有一个状态来记住它已经为第一个列表返回了哪些项,哪些项没有。这很有意义。非常感谢你!不客气,感谢您花时间将答案标记为正确,并对您的反馈进行评论,我们非常感谢您;新用户不多,所以需要花时间来做这件事。祝你一天愉快!