Ric Deez a écrit : > Hi there, > > I have a list: > L1 = [1,1,1,2,2,3] > > How can I easily turn this into a list of tuples where the first element > is the list element and the second is the number of times it occurs in > the list (I think that this is referred to as a histogram): > > i.e.: > > L2 = [(1,3),(2,2),(3,1)] > > I was doing something like: > > myDict = {} > for i in L1: > myDict.setdefault(i,[]).append(i) > > then doing this: > > L2 = [] > for k, v in myDict.iteritems(): > L2.append((k, len(v))) > > This works but I sort of feel like there ought to be an easier way,
If you don't care about order (but your solution isn't garanteed to preserve order either...): L2 = dict([(item, L1.count(item)) for item in L1]).items() But this may be inefficient is the list is large, so... def hist(seq): d = {} for item in seq: if not item in d: d[item] = seq.count(item) return d.items() > I also tried this trick, where locals()['_[1]'] refers to the list Not sure to understand how that one works... But anyway, please avoid this kind of horror unless your engaged in WORN context with a perl-monger !-). -- http://mail.python.org/mailman/listinfo/python-list