2017-03-09 3 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

これは、データを辞書に保存し、operator.itemgetterと組み合わせてitertools.groupbyを使用することで解決できます。

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

関連する問題