2017-03-09 36 views
0

我做的数据结构和算法教材的一些实际问题,以提高我的Python技能,它要求我重新设计这个代码:我如何找到某个系列输出的最大容量?

import sys 
data = [] 
for k in range(15): 
a= len(data) 
b=sys.getsizeof(data) 
print('Length: {0:3d}; Size in bytes: {1:4d}'.format(a,b)) 
data.append(None) 

输出:

Length: 0; Size in bytes: 64 
Length: 1; Size in bytes: 96 
Length: 2; Size in bytes: 96 
Length: 3; Size in bytes: 96 
Length: 4; Size in bytes: 96 
Length: 5; Size in bytes: 128 
Length: 6; Size in bytes: 128 
Length: 7; Size in bytes: 128 
Length: 8; Size in bytes: 128 
Length: 9; Size in bytes: 192 
Length: 10; Size in bytes: 192 
Length: 11; Size in bytes: 192 
Length: 12; Size in bytes: 192 
Length: 13; Size in bytes: 192 
Length: 14; Size in bytes: 192 

所以我会找到“以字节为单位”的最大长度。例如,192的最大长度将是14,128的最大长度将是8等。

我的第一个想法是遍历数据列表,并在值更改为最大值之前设置数字。但是我的Python很薄弱,我想知道如何解决这个问题。

非常感谢! 对不起,如果我犯了任何错误。我是该网站的新手。

回答

0

您可以通过将数据存储在字典中并使用itertools.groupbyoperator.itemgetter组合来解决此问题。

import sys 
import itertools as it, operator as op 

data = [] 
for k in range(15): 
    d = {} 
    d['Length'] = len(data) 
    d['Size in bytes'] = sys.getsizeof(data) 
    data.append(d) 

for k,g in it.groupby(data,key=op.itemgetter('Size in bytes')): 
    print(k,max(i['Length'] for i in g)) 

结果:

(72, 0) 
(104, 4) 
(136, 8) 
(200, 14) 
+0

哇哦,这太酷了!谢谢! – PriCi

+0

不用担心!快乐的编码给你:-) – bernie

相关问题