how to sort by length of string followed by alphabetical order?
up vote
50
down vote
favorite
I'm currently new to python and got stuck at this question, can't seem to find the proper answer.
question:Given a list of words, return a list with the same words in order of length (longest to shortest), the second sort criteria should be alphabetical. Hint: you need think of two functions.
This is what I have so far:
def bylength(word1,word2):
return len(word2)-len(word1)
def sortlist(a):
a.sort(cmp=bylength)
return a
it sorts by length but I don't know how to apply the second criteria to this sort, which is by alphabetical descending.
python sorting
add a comment |
up vote
50
down vote
favorite
I'm currently new to python and got stuck at this question, can't seem to find the proper answer.
question:Given a list of words, return a list with the same words in order of length (longest to shortest), the second sort criteria should be alphabetical. Hint: you need think of two functions.
This is what I have so far:
def bylength(word1,word2):
return len(word2)-len(word1)
def sortlist(a):
a.sort(cmp=bylength)
return a
it sorts by length but I don't know how to apply the second criteria to this sort, which is by alphabetical descending.
python sorting
1
stackoverflow.com/questions/4655591/python-sort-list - looks like a homework of a large classroom...
– eumiro
Jan 11 '11 at 15:56
add a comment |
up vote
50
down vote
favorite
up vote
50
down vote
favorite
I'm currently new to python and got stuck at this question, can't seem to find the proper answer.
question:Given a list of words, return a list with the same words in order of length (longest to shortest), the second sort criteria should be alphabetical. Hint: you need think of two functions.
This is what I have so far:
def bylength(word1,word2):
return len(word2)-len(word1)
def sortlist(a):
a.sort(cmp=bylength)
return a
it sorts by length but I don't know how to apply the second criteria to this sort, which is by alphabetical descending.
python sorting
I'm currently new to python and got stuck at this question, can't seem to find the proper answer.
question:Given a list of words, return a list with the same words in order of length (longest to shortest), the second sort criteria should be alphabetical. Hint: you need think of two functions.
This is what I have so far:
def bylength(word1,word2):
return len(word2)-len(word1)
def sortlist(a):
a.sort(cmp=bylength)
return a
it sorts by length but I don't know how to apply the second criteria to this sort, which is by alphabetical descending.
python sorting
python sorting
edited Jan 24 '12 at 22:46
Robert Harvey♦
147k33270415
147k33270415
asked Jan 11 '11 at 15:52
Adrian
2,00131312
2,00131312
1
stackoverflow.com/questions/4655591/python-sort-list - looks like a homework of a large classroom...
– eumiro
Jan 11 '11 at 15:56
add a comment |
1
stackoverflow.com/questions/4655591/python-sort-list - looks like a homework of a large classroom...
– eumiro
Jan 11 '11 at 15:56
1
1
stackoverflow.com/questions/4655591/python-sort-list - looks like a homework of a large classroom...
– eumiro
Jan 11 '11 at 15:56
stackoverflow.com/questions/4655591/python-sort-list - looks like a homework of a large classroom...
– eumiro
Jan 11 '11 at 15:56
add a comment |
4 Answers
4
active
oldest
votes
up vote
100
down vote
accepted
You can do it in two steps like this:
the_list.sort() # sorts normally by alphabetical order
the_list.sort(key=len, reverse=True) # sorts by descending length
Python's sort is stable, which means that sorting the list by length leaves the elements in alphabetical order when the length is equal.
You can also do it like this:
the_list.sort(key=lambda item: (-len(item), item))
Generally you never need cmp
, it was even removed in Python3. key
is much easier to use.
2
the lambda solution is awe-some!
– dmeu
Mar 18 '16 at 16:31
add a comment |
up vote
5
down vote
n = ['aaa', 'bbb', 'ccc', 'dddd', 'dddl', 'yyyyy']
for i in reversed(sorted(n, key=len)):
print i
yyyyy dddl dddd ccc bbb aaa
for i in sorted(n, key=len, reverse=True):
print i
yyyyy dddd dddl aaa bbb ccc
This only works if the array is already sorted. Onlysorted( sorted( iterable ), key=len )
gives the correct answer always.
– user
Jun 16 at 18:46
@user I just tried with unsorted array . Getting the same (correct) result . Can you please provide your input array ?
– Arindam Roychowdhury
Jun 18 at 7:36
sorted( ['bb', 'b', 'aa', 'a'], key=len, reverse=True)
produces['bb', 'aa', 'b', 'a']
, but it should be['aa', 'bb', 'a', 'b']
as get fromsorted( sorted( ['bb', 'b', 'aa', 'a'] ), key=len, reverse=True)
– user
Jun 18 at 13:48
add a comment |
up vote
1
down vote
-Sort your list by alpha order, then by length.
See the following exmple:
>>> coursesList = ["chemistry","physics","mathematics","art"]
>>> sorted(coursesList,key=len)
['art', 'physics', 'chemistry', 'mathematics']
>>> coursesList.append("mopsosa")
>>> sorted(coursesList,key=len)
['art', 'physics', 'mopsosa', 'chemistry', 'mathematics']
>>> coursesList.sort()
>>> sorted(coursesList,key=len)
['art', 'mopsosa', 'physics', 'chemistry', 'mathematics']
add a comment |
up vote
0
down vote
Although Jochen Ritzel said you don't need cmp, this is actually a great use case for it! Using cmp you can sort by length and then alphabetically at the same time in half the time sorting twice would take!
def cmp_func(a, b):
# sort by length and then alphabetically in lowercase
if len(a) == len(b):
return cmp(a, b)
return cmp(len(a), len(b))
sorted_the_way_you_want = sorted(the_list, cmp=cmp_func)
Example:
>>> the_list = ['B', 'BB', 'AA', 'A', 'Z', 'C', 'D']
>>> sorted(the_list, cmp=cmp_func)
['A', 'B', 'C', 'D', 'Z', 'AA', 'BB']
Note, if your list is a mix of upper and lower case replace cmp(a, b)
with cmp(a.lower(), b.lower())
as python sorts 'a' > 'Z'.
In python3 you'd need to be sorting objects with __lt__
style comparison functions defined or functools.cmp_to_key()
which does that for you.
add a comment |
4 Answers
4
active
oldest
votes
4 Answers
4
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
100
down vote
accepted
You can do it in two steps like this:
the_list.sort() # sorts normally by alphabetical order
the_list.sort(key=len, reverse=True) # sorts by descending length
Python's sort is stable, which means that sorting the list by length leaves the elements in alphabetical order when the length is equal.
You can also do it like this:
the_list.sort(key=lambda item: (-len(item), item))
Generally you never need cmp
, it was even removed in Python3. key
is much easier to use.
2
the lambda solution is awe-some!
– dmeu
Mar 18 '16 at 16:31
add a comment |
up vote
100
down vote
accepted
You can do it in two steps like this:
the_list.sort() # sorts normally by alphabetical order
the_list.sort(key=len, reverse=True) # sorts by descending length
Python's sort is stable, which means that sorting the list by length leaves the elements in alphabetical order when the length is equal.
You can also do it like this:
the_list.sort(key=lambda item: (-len(item), item))
Generally you never need cmp
, it was even removed in Python3. key
is much easier to use.
2
the lambda solution is awe-some!
– dmeu
Mar 18 '16 at 16:31
add a comment |
up vote
100
down vote
accepted
up vote
100
down vote
accepted
You can do it in two steps like this:
the_list.sort() # sorts normally by alphabetical order
the_list.sort(key=len, reverse=True) # sorts by descending length
Python's sort is stable, which means that sorting the list by length leaves the elements in alphabetical order when the length is equal.
You can also do it like this:
the_list.sort(key=lambda item: (-len(item), item))
Generally you never need cmp
, it was even removed in Python3. key
is much easier to use.
You can do it in two steps like this:
the_list.sort() # sorts normally by alphabetical order
the_list.sort(key=len, reverse=True) # sorts by descending length
Python's sort is stable, which means that sorting the list by length leaves the elements in alphabetical order when the length is equal.
You can also do it like this:
the_list.sort(key=lambda item: (-len(item), item))
Generally you never need cmp
, it was even removed in Python3. key
is much easier to use.
edited Jan 11 '11 at 15:58
answered Jan 11 '11 at 15:53
Jochen Ritzel
75.2k18153164
75.2k18153164
2
the lambda solution is awe-some!
– dmeu
Mar 18 '16 at 16:31
add a comment |
2
the lambda solution is awe-some!
– dmeu
Mar 18 '16 at 16:31
2
2
the lambda solution is awe-some!
– dmeu
Mar 18 '16 at 16:31
the lambda solution is awe-some!
– dmeu
Mar 18 '16 at 16:31
add a comment |
up vote
5
down vote
n = ['aaa', 'bbb', 'ccc', 'dddd', 'dddl', 'yyyyy']
for i in reversed(sorted(n, key=len)):
print i
yyyyy dddl dddd ccc bbb aaa
for i in sorted(n, key=len, reverse=True):
print i
yyyyy dddd dddl aaa bbb ccc
This only works if the array is already sorted. Onlysorted( sorted( iterable ), key=len )
gives the correct answer always.
– user
Jun 16 at 18:46
@user I just tried with unsorted array . Getting the same (correct) result . Can you please provide your input array ?
– Arindam Roychowdhury
Jun 18 at 7:36
sorted( ['bb', 'b', 'aa', 'a'], key=len, reverse=True)
produces['bb', 'aa', 'b', 'a']
, but it should be['aa', 'bb', 'a', 'b']
as get fromsorted( sorted( ['bb', 'b', 'aa', 'a'] ), key=len, reverse=True)
– user
Jun 18 at 13:48
add a comment |
up vote
5
down vote
n = ['aaa', 'bbb', 'ccc', 'dddd', 'dddl', 'yyyyy']
for i in reversed(sorted(n, key=len)):
print i
yyyyy dddl dddd ccc bbb aaa
for i in sorted(n, key=len, reverse=True):
print i
yyyyy dddd dddl aaa bbb ccc
This only works if the array is already sorted. Onlysorted( sorted( iterable ), key=len )
gives the correct answer always.
– user
Jun 16 at 18:46
@user I just tried with unsorted array . Getting the same (correct) result . Can you please provide your input array ?
– Arindam Roychowdhury
Jun 18 at 7:36
sorted( ['bb', 'b', 'aa', 'a'], key=len, reverse=True)
produces['bb', 'aa', 'b', 'a']
, but it should be['aa', 'bb', 'a', 'b']
as get fromsorted( sorted( ['bb', 'b', 'aa', 'a'] ), key=len, reverse=True)
– user
Jun 18 at 13:48
add a comment |
up vote
5
down vote
up vote
5
down vote
n = ['aaa', 'bbb', 'ccc', 'dddd', 'dddl', 'yyyyy']
for i in reversed(sorted(n, key=len)):
print i
yyyyy dddl dddd ccc bbb aaa
for i in sorted(n, key=len, reverse=True):
print i
yyyyy dddd dddl aaa bbb ccc
n = ['aaa', 'bbb', 'ccc', 'dddd', 'dddl', 'yyyyy']
for i in reversed(sorted(n, key=len)):
print i
yyyyy dddl dddd ccc bbb aaa
for i in sorted(n, key=len, reverse=True):
print i
yyyyy dddd dddl aaa bbb ccc
edited Mar 31 '17 at 0:53
Ninjakannon
2,66642645
2,66642645
answered Apr 15 '14 at 11:35
Arindam Roychowdhury
1,35032336
1,35032336
This only works if the array is already sorted. Onlysorted( sorted( iterable ), key=len )
gives the correct answer always.
– user
Jun 16 at 18:46
@user I just tried with unsorted array . Getting the same (correct) result . Can you please provide your input array ?
– Arindam Roychowdhury
Jun 18 at 7:36
sorted( ['bb', 'b', 'aa', 'a'], key=len, reverse=True)
produces['bb', 'aa', 'b', 'a']
, but it should be['aa', 'bb', 'a', 'b']
as get fromsorted( sorted( ['bb', 'b', 'aa', 'a'] ), key=len, reverse=True)
– user
Jun 18 at 13:48
add a comment |
This only works if the array is already sorted. Onlysorted( sorted( iterable ), key=len )
gives the correct answer always.
– user
Jun 16 at 18:46
@user I just tried with unsorted array . Getting the same (correct) result . Can you please provide your input array ?
– Arindam Roychowdhury
Jun 18 at 7:36
sorted( ['bb', 'b', 'aa', 'a'], key=len, reverse=True)
produces['bb', 'aa', 'b', 'a']
, but it should be['aa', 'bb', 'a', 'b']
as get fromsorted( sorted( ['bb', 'b', 'aa', 'a'] ), key=len, reverse=True)
– user
Jun 18 at 13:48
This only works if the array is already sorted. Only
sorted( sorted( iterable ), key=len )
gives the correct answer always.– user
Jun 16 at 18:46
This only works if the array is already sorted. Only
sorted( sorted( iterable ), key=len )
gives the correct answer always.– user
Jun 16 at 18:46
@user I just tried with unsorted array . Getting the same (correct) result . Can you please provide your input array ?
– Arindam Roychowdhury
Jun 18 at 7:36
@user I just tried with unsorted array . Getting the same (correct) result . Can you please provide your input array ?
– Arindam Roychowdhury
Jun 18 at 7:36
sorted( ['bb', 'b', 'aa', 'a'], key=len, reverse=True)
produces ['bb', 'aa', 'b', 'a']
, but it should be ['aa', 'bb', 'a', 'b']
as get from sorted( sorted( ['bb', 'b', 'aa', 'a'] ), key=len, reverse=True)
– user
Jun 18 at 13:48
sorted( ['bb', 'b', 'aa', 'a'], key=len, reverse=True)
produces ['bb', 'aa', 'b', 'a']
, but it should be ['aa', 'bb', 'a', 'b']
as get from sorted( sorted( ['bb', 'b', 'aa', 'a'] ), key=len, reverse=True)
– user
Jun 18 at 13:48
add a comment |
up vote
1
down vote
-Sort your list by alpha order, then by length.
See the following exmple:
>>> coursesList = ["chemistry","physics","mathematics","art"]
>>> sorted(coursesList,key=len)
['art', 'physics', 'chemistry', 'mathematics']
>>> coursesList.append("mopsosa")
>>> sorted(coursesList,key=len)
['art', 'physics', 'mopsosa', 'chemistry', 'mathematics']
>>> coursesList.sort()
>>> sorted(coursesList,key=len)
['art', 'mopsosa', 'physics', 'chemistry', 'mathematics']
add a comment |
up vote
1
down vote
-Sort your list by alpha order, then by length.
See the following exmple:
>>> coursesList = ["chemistry","physics","mathematics","art"]
>>> sorted(coursesList,key=len)
['art', 'physics', 'chemistry', 'mathematics']
>>> coursesList.append("mopsosa")
>>> sorted(coursesList,key=len)
['art', 'physics', 'mopsosa', 'chemistry', 'mathematics']
>>> coursesList.sort()
>>> sorted(coursesList,key=len)
['art', 'mopsosa', 'physics', 'chemistry', 'mathematics']
add a comment |
up vote
1
down vote
up vote
1
down vote
-Sort your list by alpha order, then by length.
See the following exmple:
>>> coursesList = ["chemistry","physics","mathematics","art"]
>>> sorted(coursesList,key=len)
['art', 'physics', 'chemistry', 'mathematics']
>>> coursesList.append("mopsosa")
>>> sorted(coursesList,key=len)
['art', 'physics', 'mopsosa', 'chemistry', 'mathematics']
>>> coursesList.sort()
>>> sorted(coursesList,key=len)
['art', 'mopsosa', 'physics', 'chemistry', 'mathematics']
-Sort your list by alpha order, then by length.
See the following exmple:
>>> coursesList = ["chemistry","physics","mathematics","art"]
>>> sorted(coursesList,key=len)
['art', 'physics', 'chemistry', 'mathematics']
>>> coursesList.append("mopsosa")
>>> sorted(coursesList,key=len)
['art', 'physics', 'mopsosa', 'chemistry', 'mathematics']
>>> coursesList.sort()
>>> sorted(coursesList,key=len)
['art', 'mopsosa', 'physics', 'chemistry', 'mathematics']
answered Jun 15 '15 at 10:34
jyfar
392
392
add a comment |
add a comment |
up vote
0
down vote
Although Jochen Ritzel said you don't need cmp, this is actually a great use case for it! Using cmp you can sort by length and then alphabetically at the same time in half the time sorting twice would take!
def cmp_func(a, b):
# sort by length and then alphabetically in lowercase
if len(a) == len(b):
return cmp(a, b)
return cmp(len(a), len(b))
sorted_the_way_you_want = sorted(the_list, cmp=cmp_func)
Example:
>>> the_list = ['B', 'BB', 'AA', 'A', 'Z', 'C', 'D']
>>> sorted(the_list, cmp=cmp_func)
['A', 'B', 'C', 'D', 'Z', 'AA', 'BB']
Note, if your list is a mix of upper and lower case replace cmp(a, b)
with cmp(a.lower(), b.lower())
as python sorts 'a' > 'Z'.
In python3 you'd need to be sorting objects with __lt__
style comparison functions defined or functools.cmp_to_key()
which does that for you.
add a comment |
up vote
0
down vote
Although Jochen Ritzel said you don't need cmp, this is actually a great use case for it! Using cmp you can sort by length and then alphabetically at the same time in half the time sorting twice would take!
def cmp_func(a, b):
# sort by length and then alphabetically in lowercase
if len(a) == len(b):
return cmp(a, b)
return cmp(len(a), len(b))
sorted_the_way_you_want = sorted(the_list, cmp=cmp_func)
Example:
>>> the_list = ['B', 'BB', 'AA', 'A', 'Z', 'C', 'D']
>>> sorted(the_list, cmp=cmp_func)
['A', 'B', 'C', 'D', 'Z', 'AA', 'BB']
Note, if your list is a mix of upper and lower case replace cmp(a, b)
with cmp(a.lower(), b.lower())
as python sorts 'a' > 'Z'.
In python3 you'd need to be sorting objects with __lt__
style comparison functions defined or functools.cmp_to_key()
which does that for you.
add a comment |
up vote
0
down vote
up vote
0
down vote
Although Jochen Ritzel said you don't need cmp, this is actually a great use case for it! Using cmp you can sort by length and then alphabetically at the same time in half the time sorting twice would take!
def cmp_func(a, b):
# sort by length and then alphabetically in lowercase
if len(a) == len(b):
return cmp(a, b)
return cmp(len(a), len(b))
sorted_the_way_you_want = sorted(the_list, cmp=cmp_func)
Example:
>>> the_list = ['B', 'BB', 'AA', 'A', 'Z', 'C', 'D']
>>> sorted(the_list, cmp=cmp_func)
['A', 'B', 'C', 'D', 'Z', 'AA', 'BB']
Note, if your list is a mix of upper and lower case replace cmp(a, b)
with cmp(a.lower(), b.lower())
as python sorts 'a' > 'Z'.
In python3 you'd need to be sorting objects with __lt__
style comparison functions defined or functools.cmp_to_key()
which does that for you.
Although Jochen Ritzel said you don't need cmp, this is actually a great use case for it! Using cmp you can sort by length and then alphabetically at the same time in half the time sorting twice would take!
def cmp_func(a, b):
# sort by length and then alphabetically in lowercase
if len(a) == len(b):
return cmp(a, b)
return cmp(len(a), len(b))
sorted_the_way_you_want = sorted(the_list, cmp=cmp_func)
Example:
>>> the_list = ['B', 'BB', 'AA', 'A', 'Z', 'C', 'D']
>>> sorted(the_list, cmp=cmp_func)
['A', 'B', 'C', 'D', 'Z', 'AA', 'BB']
Note, if your list is a mix of upper and lower case replace cmp(a, b)
with cmp(a.lower(), b.lower())
as python sorts 'a' > 'Z'.
In python3 you'd need to be sorting objects with __lt__
style comparison functions defined or functools.cmp_to_key()
which does that for you.
answered May 23 at 1:10
theannouncer
538923
538923
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f4659524%2fhow-to-sort-by-length-of-string-followed-by-alphabetical-order%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
1
stackoverflow.com/questions/4655591/python-sort-list - looks like a homework of a large classroom...
– eumiro
Jan 11 '11 at 15:56