Python 如果我在for循环中取消对print()函数的注释,';组';列表中填充的是空列表,而不是结果

Python 如果我在for循环中取消对print()函数的注释,';组';列表中填充的是空列表,而不是结果,python,python-3.x,for-loop,itertools,Python,Python 3.x,For Loop,Itertools,上述代码的结果: import itertools data1 =[100,80,80,80,80,80,90,90,85,85,85] keys = [] groups = [] sorted_data1 = sorted(data1) for k,g in itertools.groupby(sorted_data1): #print('key: ',k,' group: ',list(g)) keys.append(k) groups.append(list(g

上述代码的结果:

import itertools

data1 =[100,80,80,80,80,80,90,90,85,85,85]
keys = []
groups = []
sorted_data1 = sorted(data1)

for k,g in itertools.groupby(sorted_data1):
    #print('key: ',k,' group: ',list(g))
    keys.append(k)
    groups.append(list(g))

print('keys: ', keys)
print('Groups: ', groups)
for循环中的uncommenting print()将“groups”作为空列表的列表。请检查一下。

在循环中

keys:  [80, 85, 90, 100]
Groups:  [[80, 80, 80, 80, 80], [85, 85, 85], [90, 90], [100]]

RESULT I GET WHEN 'print()' IS UNCOMMENTED:
key:  80  group:  [80, 80, 80, 80, 80]
key:  85  group:  [85, 85, 85]
key:  90  group:  [90, 90]
key:  100  group:  [100]
keys:  [80, 85, 90, 100]
Groups:  [[], [], [], []]
g
本身就是一个迭代器,它不像列表那样是一个集合

当你打电话的时候

for k,g in itertools.groupby(sorted_data1):
在循环中,打印中的
list(g)
已经通过整个迭代器
g
来创建列表。那么,当你打电话的时候

print('key: ',k,' group: ',list(g))
之后,
g
在某种意义上已经是“空的”(更准确地说:它指向迭代器的末尾),因此列表中再也没有什么可放的了



像DDGG建议的那样,您可以先将迭代
g
一次的结果存储在一个更永久的集合(如
列表
)中。然后您可以多次重复使用该列表

正如Dennis所说,您可以将代码更改为以下内容以解决问题:

groups.append(list(g))

你能建议一个解决方案,让我可以同时使用print()和append()吗?以更持久的方式保存集合一次(例如,先使用list(g)一次并存储它)
import itertools

data1 = [100, 80, 80, 80, 80, 80, 90, 90, 85, 85, 85]
keys = []
groups = []
sorted_data1 = sorted(data1)

for k, g in itertools.groupby(sorted_data1):
    group = list(g)
    print('key: ', k, ' group: ', group)
    keys.append(k)
    groups.append(group)

print('keys: ', keys)
print('Groups: ', groups)