Python Forum
Sort last - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Python Coding (https://python-forum.io/forum-7.html)
+--- Forum: Homework (https://python-forum.io/forum-9.html)
+--- Thread: Sort last (/thread-26510.html)



Sort last - pyzyx3qwerty - May-04-2020

I have been taking a class, so this must count as homework. So thing is given a list of non-empty tuples, return a list sorted in increasing order by the last element in each tuple. e.g. [(1, 7), (1, 3), (3, 4, 5), (2, 2)] yields [(2, 2), (1, 3), (3, 4, 5), (1, 7)] Hint: use a custom key= function to extract the last element form each tuple.
Here's my go :
def sort_last(tuples):
     for t in tuples :
          last_element = t[-1]
     return sorted(tuples, key = last)
Unfortunately, this is all i have been able to do. I don't know how can I sort the list on the basis of its last element in ascending order. Any help would be appreciated


RE: Sort last - anbu23 - May-04-2020

>>> tup=[(1, 7), (1, 3), (3, 4, 5), (2, 2)]
>>> sorted(tup, key=lambda x:x[-1])
[(2, 2), (1, 3), (3, 4, 5), (1, 7)]
>>>



RE: Sort last - DeaD_EyE - May-04-2020

You can use the itemgetter.

from operator import itemgetter

tup = [(1, 7), (1, 3), (3, 4, 5), (2, 2)]
sorted(tup, key=itemgetter(-1))
The itemgetter could also used to access keys in a dict:
data = [{"x": 10, "y": 42},{"x": 20, "y": 44},{"x": 13, "y": -1}]

# sort by x
sorted(d, key=itemgetter("x"))

# sort by x and then y
sorted(d, key=itemgetter("x", "y"))

# sort by y and then x
sorted(d, key=itemgetter("y", "x"))
How it works:

my_itemgetter = itemgetter(1)
# the itemgetter returns a callable, which takes the sequence as input
my_itemgetter([1,2,3])
Output:
2
If you call it in one line, it looks a bit strange:
itemgetter(1)([1,2,3])



RE: Sort last - pyzyx3qwerty - May-04-2020

@anbu23 and @DeaD_EyE thanks for your replies.
Here's the code if anyone needs it in the future :
def sort_last(tuples):
     for t in tuples :
          last_element = t[-1]
     return sorted(tup, key=lambda x:x[-1])
tup =[ (1, 7), (1, 3), (3, 4, 5), (2, 2)]
print(sort_last(tup))
And output :
Output:
[(2, 2), (1, 3), (3, 4, 5), (1, 7)]



RE: Sort last - Yoriz - May-04-2020

  • Lines 2 & 3 are not doing anything useful, they can be removed as line 4 does all the work.
  • On line 4, sorted should be passed tuples instead of using the global tup.

Code becomes
def sort_last(tuples):
    return sorted(tuples, key=lambda x: x[-1])


tup = [(1, 7), (1, 3), (3, 4, 5), (2, 2)]
print(sort_last(tup))
Output:
[(2, 2), (1, 3), (3, 4, 5), (1, 7)]



RE: Sort last - pyzyx3qwerty - May-04-2020

Thanks @Yoriz. Not only do i get the same expected result, but it make my codes shorter


RE: Sort last - pyzyx3qwerty - May-05-2020

(May-04-2020, 03:52 PM)Yoriz Wrote: [*]On line 4, sorted should be passed tuples instead of using the global tup.
But, if I may ask, what is this global tup you are talking about? And where can it be used?


RE: Sort last - DeaD_EyE - May-05-2020

tup is just a name, which refers to the object [(1, 7), (1, 3), (3, 4, 5), (2, 2)].

anbu23 named it tup.
I guess he has chosen this name, because the inner elements are tuples.
Finding the right names is not always easy.