Ben Bush said unto the world upon 2005-11-15 01:24: <top posting corrected and post trimmed>
> > Unfortunately, the indents got screwed up along the way. But the part > >>of my code you asked about was: >> >>for item in list1: >> if item in list2: >> if item + 1 in list1 and item + 1 in list2: >> return True >> >>In some detail: <snip my detailed explanation> >>Does that clarify it? >> >>Finally, your response to Alex would have been much more useful if >>you'd quoted the error rather than just asserting that you got an >>error :-) >> >>Best, >> >>Brian vdB Hi Ben, first, while there are those on the list/n.g. who differ, the majoritarian view is that top posting isn't a good thing. At minimum, if someone bothered to correct it, it would be nice if in a further follow-up you didn't top-post again :-) Second, you might find the tutor list really helpful. It is where I learned most of what I know, and I still read it more than c.l.p. It is very newbie friendly. As for your question: >> Hi Brian, > > regarding "if item + 1 in list1 and item + 1 in list2:", > my understanding is this will check whether the following item in each list > is the same. How does the code permit the situation that the order does not > matter? > For example, for lisA and lisB, the comparison is true and the two lists > have 5 and 6 but different order. > lisA=[1,2,3,4,5,6,9] > lisB=[1,6,5] > Many Thanks! There are two distinct issues that might be the source of your confusion. I will be explicit about both; pardon if only one applied. >>> num_list = [1, 42, 451] >>> for item in num_list: print item, type(item) 1 <type 'int'> 42 <type 'int'> 451 <type 'int'> >>> Iterating over a list as I did makes item refer to each list member in turn. So, item + 1 doesn't refer to the next item (except by accident as it were when two items are sequential ints). Rather, it refers to int that results from adding 1 to the int that is item. You might be thinking of list index notation instead: >>> index = 1 >>> num_list[index], num_list[index + 1] (42, 451) >>> (General tip: putting a print or two in my original code would have cleared that up very quickly.) So, that cleared up, are you wondering why item + 1 suffices, instead of both item + 1 and item - 1? If so, consider that it the list1 has both n and n - 1 in it and we iterate over list1 checking each case, eventually item will refer to n - 1. In that case, item + 1 = n and we are covered after all. I did as I did in my original code thinking it was probably quicker to have only one test and pay the cost that there might be a quicker exit from the iteration were I to test both item + 1 and item - 1. f it mattered, I'd test for speed. Of course, if speed mattered and I could ever remember to use sets :-) I'd follow Alex and Duncan's suggestions instead! If that doesn't clear it up, give yourself a few short lists and run test cases having inserted print statements to see what is going on. To stop it all from whizzing by too fast, put in raw_input("Hit enter and I'll keep working") somewhere in the loops to slow things down. HTH, Brian vdB -- http://mail.python.org/mailman/listinfo/python-list