Vin*_*nny 2 python for-loop python-itertools python-3.x
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)
Run Code Online (Sandbox Code Playgroud)
上述代码的结果:
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: [[], [], [], []]
Run Code Online (Sandbox Code Playgroud)
在for循环中取消注释print()会将'groups'作为空列表的列表.请仔细研究一下.
在循环
for k,g in itertools.groupby(sorted_data1):
Run Code Online (Sandbox Code Playgroud)
g 它本身就是一个迭代器,它不是一个像列表一样的集合.
你打电话的时候
print('key: ',k,' group: ',list(g))
Run Code Online (Sandbox Code Playgroud)
在循环list(g)内部,print内部已经遍历整个迭代器g以创建列表.所以,当你打电话的时候
groups.append(list(g))
Run Code Online (Sandbox Code Playgroud)
之后,g在某种意义上已经是"空的"(更确切地说:它指向迭代器的末尾),所以没有什么可以放在列表中了
与DDGG建议的一样,您可以先将g更多永久性集合(如a list)中的迭代结果存储起来.然后,您可以多次重复使用该列表
| 归档时间: |
|
| 查看次数: |
41 次 |
| 最近记录: |