On Wed, 24 Apr 2013 22:05:52 -0700, CM wrote: > I have to count the number of various two-digit sequences in a list such > as this: > > mylist = [(2,4), (2,4), (3,4), (4,5), (2,1)] # (Here the (2,4) sequence > appears 2 times.) > > and tally up the results, assigning each to a variable. The inelegant > first pass at this was something like... > > # Create names and set them all to 0 > alpha = 0 > beta = 0 > delta = 0 > gamma = 0 > # etc...
Do they absolutely have to be global variables like that? Seems like a bad design, especially if you don't know in advance exactly how many there are. > # loop over all the tuple sequences and increment appropriately for > sequence_tuple in list_of_tuples: > if sequence_tuple == (1,2): > alpha += 1 > if sequence_tuple == (2,4): > beta += 1 > if sequence_tuple == (2,5): > delta +=1 > # etc... But I actually have more than 10 sequence types. counts = {} for t in list_of_tuples: counts[t] = counts.get(t, 0) + 1 Or, use collections.Counter: from collections import Counter counts = Counter(list_of_tuples) > # Finally, I need a list created like this: result_list = [alpha, beta, > delta, gamma] #etc...in that order Dicts are unordered, so getting the results in a specific order will be a bit tricky. You could do this: results = sorted(counts.items(), key=lambda t: t[0]) results = [t[1] for t in results] if you are lucky enough to have the desired order match the natural order of the tuples. Otherwise: desired_order = [(2, 3), (3, 1), (1, 2), ...] results = [counts.get(t, 0) for t in desired_order] -- Steven -- http://mail.python.org/mailman/listinfo/python-list