Jose Amoreira wrote:
On Friday, June 11, 2010 02:57:34 pm Ken G. wrote:
I have been working on this problem for several days and I am not making
any progress.  I have a group of 18 number, in ascending order, within a
list.  They ranged from 1 to 39.  Some numbers are duplicated as much as
three times or as few as none.

I started with one list containing the numbers.  For example, they are
listed as like below:

a = [1, 2, 3, 3, 4]

I started off with using a loop:

    for j in range (0, 5):
    x = a[0] # for example, 1

How would I compare '1' with 2, 3, 3, 4?

Do I need another duplicated list such as b = a and compare a[0] with
either b[0], b[1], b[2], b[3], b[4]?

Or do I compare a[0] with a[1], a[2], a[3], a[4]?

In any event, if a number is listed more than once, I would like to know
how many times, such as 2 or 3 times.  For example, '3' is listed twice
within a list.

TIA,


I would do it with a dictionary:
def reps(lst):
        dict = {}
        for item in lst:
                if item in dict:
                        dict[item] += 1
                else:
                        dict[item] = 1
        return dict

This function returns a dictionary with of the number of times each value in the list is repeated. Even shorter using dict.setdefault:

def reps(lst):
        dict={}
        for item in lst:
                dict[item] = dict.setdefault(item,0) + 1
        return dict

For instance, if lst=[1,2,2,2,4,4,5], then reps(lst) returns
{1: 1, 2: 3, 4: 2, 5: 1}

Using the fact that the list is ordered, one can design a more efficient solution (go through the list; if this item is equal to the previous, then it is repeated, else, it is a new value). But you list is short enough for this direct approach to work.
Hope this helps. Cheers,
Jose

Thanks.  I will be studying your approach.  Thanks all.

Ken
_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to