Convert list to another form but providing same information

Steven D'Aprano steve at pearwood.info
Tue Mar 22 06:49:00 EDT 2016


On 2016年3月22日 12:35 pm, Paul Rubin wrote:
> Maurice <mauricioliveiraguarda at gmail.com> writes:
>> I have a list such [6,19,19,21,21,21]
>> Therefore the resulting list should be:
>> [0,0,0,0,0,0,1,0,0,0...,2,0,3,0...0]
>> Rather than a sparse list you'd typically want a dictionary (untested):
>> from collections import defaultdict
> the_list = [0,0,0,0,0,0,1,0,0,0...,2,0,3,0...0]
> ...
> days = defaultdict(int)
> for t in the_list:
> days[t] += 1
>> this results in days being the defaultdict { 6:1, 19:2, 21:3 }.

For just 3 items out of 32, doing this as an optimisation is barely worth
it. Using Python 3.4, I get 168 bytes for the list solution and 152 bytes
for a default dict solution:
py> print(days)
[0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0]
py> sys.getsizeof(days)
168
py> from collections import defaultdict
py> d = defaultdict(int)
py> d.update({ 6:1, 19:2, 21:3 })
py> sys.getsizeof(d)
152
By all means use whichever solution suits you best, but don't expect to save
much memory in a "spare array" of only 32 items :-)
-- 
Steven


More information about the Python-list mailing list

AltStyle によって変換されたページ (->オリジナル) /