On 24/02/18 20:00, James Lundy wrote: > To whom it may concern. This code is from Dr. John Keyser.
Since you don;t show us the complete program I will have to make some assumptions... > gooddata = [] This is degioned as a list by virtue of the [] > for singleday in datalist: > if (singleday[0] == day) and (singleday[1] == month): > gooddata.append({singleday[2], singleday[3], singleday[4], > singleday[5]}) This appends a set by virtue of the {} The bracket type is what defines the data type. > # Perform analysis > minsofar = 120 > maxsofar = -100 > numgooddates = 1 > sumofmin = 0 > sumofmax = 0 > > # so singleday in datalist is a list while singleday in gooddata is a > set????????? I don't know what singleday is since you don't show it's creation. But singleday does not exist in gooddata. Instead you have created a set that contains some elements from singleday. But those values are copies that bear no relation to the original singleday elements. > for singleday in gooddata: This creates a new singleday object that is not related to the original singleday. This one will be an instance of whatever is in gooddata. In this case we know these are sets. > sumofmin += singleday[1] And you can't index a set. So you get an error. If you want singleday to be a list you either need to insert a list in the first loop or explicitly convert the set to a list. But bear in mind that sets have no defined order so you may not get the values out in the order you put them in. And sets don;t allow duplicates so if two of your original singleday values were identical one would be thrown away. I suspect you really wanted to use a list in the top for loop: if (singleday[0] == day) and (singleday[1] == month): gooddata.append( [ singleday[2], singleday[3], singleday[4], singleday[5] ] ) Note however that the indexes will not be carried over, so in your second loop singleday[1] refers to the old singleday[3]. If you want to retain the original indexes (and all the elements) then just append singleday itself: if (singleday[0] == day) and (singleday[1] == month): gooddata.append( singleday ) > Could this be a bug in my Pycharm 3 compiler Nope, it is extremely unlikely that you will find a bug in any compiler or interpreter(*). You should always assume that the fault is in your code first and only consider the compiler when all else has been eliminated. (*)In 40 years of programming I've only once found such a bug and it only manifested itself with a very arcane - and slightly suspect - piece of code. Compilers and interpreters tend to be very rigorously tested; because they can be - they have a very clearly defined function. > TypeError: 'set' object does not support indexing > > persist. Because you are creating a list of sets. Change the set to a list and the problem will go away. > I will attach the code and test file. The list server doesn't like attachments (although text is usually OK) its better to paste things into the message or provide a link to a web site) HTH -- Alan G Author of the Learn to Program web site http://www.alan-g.me.uk/ http://www.amazon.com/author/alan_gauld Follow my photo-blog on Flickr at: http://www.flickr.com/photos/alangauldphotos _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor