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)