0

I have an array of string-numbers, like:

numbers = ['10', '8', '918', '101010']

When I use sorted(numbers), I get them sorted lexicographically, e.g. '8' > '17'.

How can I iterate over the strings sorted according to the number value?

0

5 Answers 5

6

You can use the built-in sorted() function with a key int to map each item in your list to an integer prior to comparison:

numbers = ['10', '8', '918', '101010']
numbers = sorted(numbers, key=int)
print(numbers)

Output

['8', '10', '918', '101010']

Using this method will output a list of strings as desired.

Sign up to request clarification or add additional context in comments.

1 Comment

looks like a great and a very elegant solution
3

You can transform the elements of the array to integers by using the built-in map function.

print sorted(map(int, numbers))

Output:

[8, 10, 918, 101010]

1 Comment

Nice, and then I can use str() in order to get a string again. Thank you!
1

If you want to keep as strings you can pass int as the key to list.sort which will sort the original list:

numbers = ['10', '8', '918', '101010']
numbers.sort(key=int)

Comments

1

Here is how I like to do it, which is very fast.

print(sorted(sorted(numbers), key=len))

1 Comment

It would be good to explain why you need to use sorted() twice.
0

all elements types are string,

 >>> x=['4', '5', '29', '54', '4', '0', '-214', '542', '-64', '1', '-3', '6', '-6']
 >>> max(x)
 '6'

It "orders" the words alphabetically and returns the one that is at the bottom of the alphabetic list

Few more examples:

    >>> list1 = ['kyle', 'dhamu']
    >>> max(list1)
    'kyle'

returns kyle because k is after d

Also remember from python3.7 you cannot mix strings and integers to use max function. Below is the example

>>> mix_list = ['my', 'name', 'is', 1 ]
>>> max(mix_list)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: '>' not supported between instances of 'int' and 'str'

                                                                                                               

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.