1. Not finding help here? Sign up for a free 30min tutor trial with Chegg Tutors
    Dismiss Notice
Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Why does this code work, python

  1. Nov 13, 2011 #1
    This isn't quite homework, it was just in my textbook as an illustration. Below is a function to return a list in reverse order.

    Why does it work? My brother tried to explain it to me but failed to clarify. The only line I don't understand is the third and what process takes place because of it.

    Code (Text):

    def list_reverse(a_list):            
         for index in range(len(a_list) / 2):      
             a_list[index],a_list[-index-1] = a_list[-index-1],a_list[index]
       
         return a_list

    this_list=["happy", 1,2,3,4,5]
    print list_reverse(this_list)
     
  2. jcsd
  3. Nov 13, 2011 #2

    wukunlin

    User Avatar
    Gold Member

    basically, in a list there are n elements, with indices 0, 1, 2, 3, ... , n-1

    in the third line, you assign element n-1 to index 0, assign element n-2 to index 2, assign element n-1-x to index x, as well as the reverse, ie assign element x to index n-1-x

    you have to do it in pairs because if you simply assign element x into index n-1-x, what was originally as element n-1-x would then be lost and (in most cases) irrecoverable
     
  4. Nov 13, 2011 #3

    Mark44

    Staff: Mentor

    That third line is very tricky. The purpose of that line is to swap two elements of a list. Although you can do this in pretty much any programming language, the way it is done here is unique to Python.

    The more usual way of swapping two elements in a list is this:
    1) Store the value of the first variable in a temp variable.
    2) Store the value of the second element in the first variable.
    3) Store the value of temp in the second variable.

    Here is Python code for reversing the elements of a list, using this technique.
    Code (Text):
    def list_reverse(a_list):            
        for index in range(len(a_list) / 2):      
            temp = a_list[index]
            a_list[index] = a_list[-index-1]
            a_list[-index-1] = temp
               
        return a_list

    this_list=[0, 1,2,3,4,5, 6, 7, 8, 9]
    print this_list
    print list_reverse(this_list)
     
    The other thing that is tricky about the code you showed is its use of negative indexes for the list. My code example can be rewritten so that it doesn't use negative list indexes.
    Code (Text):
    def list_reverse(a_list):
        length = len(a_list)            
        for index in range(len(a_list) / 2):      
            temp = a_list[index]
            a_list[index] = a_list[len -index-1]
            a_list[len -index-1] = temp
               
        return a_list

    this_list=[0, 1,2,3,4,5, 6, 7, 8, 9]
    print this_list
    print list_reverse(this_list)
     
  5. Nov 14, 2011 #4

    Dick

    User Avatar
    Science Advisor
    Homework Helper

    This a good academic exercise, but everyone knows the real way to reverse a list in Python is to use the 'reverse' method of the list class, right? It's going to be faster than the Python code using tuples, and even faster than the pseudo-C code using 'temp'. Just checking...
     
  6. Nov 14, 2011 #5
    Dick Said
    Re: Why does this code work, python
    This a good academic exercise, but everyone knows the real way to reverse a list in Python is to use the 'reverse' method of the list class, right? It's going to be faster than the Python code using tuples, and even faster than the pseudo-C code using 'temp'. Just checking...


    Yes, that's understood

    I think the point was to give us Hint as to What C might behave like in this instance
     
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook




Similar Discussions: Why does this code work, python
Loading...