How to sort a list of strings numerically?

Question

I know that this sounds trivial but I did not realize that the `sort()` function of Python was weird. I have a list of "numbers" that are actually in string form, so I first convert them to ints, then attempt a sort.

``````list1=["1","10","3","22","23","4","2","200"]
for item in list1:
item=int(item)

list1.sort()
print list1
``````

Gives me:

``````['1', '10', '2', '200', '22', '23', '3', '4']
``````

What I want is

``````['1','2','3','4','10','22','23','200']
``````

I've looked around for some of the algorithms associated with sorting numeric sets, but the ones I found all involve sorting alphanumeric sets.

I know this is probably a no brainer problem but google and my textbook don't offer anything more or less useful than the `.sort()` function.

1
107
4/1/2019 4:18:12 PM

You haven't actually converted your strings to ints. Or rather, you did, but then you didn't do anything with the results. What you want is:

``````list1 = ["1","10","3","22","23","4","2","200"]
list1 = [int(x) for x in list1]
list1.sort()
``````

If for some reason you need to keep strings instead of ints (usually a bad idea, but maybe you need to preserve leading zeros or something), you can use a key function. `sort` takes a named parameter, `key`, which is a function that is called on each element before it is compared. The key function's return values are compared instead of comparing the list elements directly:

``````list1 = ["1","10","3","22","23","4","2","200"]
# call int(x) on each element before comparing it
list1.sort(key=int)
``````
173
5/12/2019 10:24:44 PM

You could pass a function to the `key` parameter to the `.sort` method. With this, the system will sort by key(x) instead of x.

``````list1.sort(key=int)
``````

BTW, to convert the list to integers permanently, use the `map` function

``````list1 = list(map(int, list1))   # you don't need to call list() in Python 2.x
``````

or list comprehension

``````list1 = [int(x) for x in list1]
``````