Python | Split String Convert to Int

5/5 - (3 votes)

Summary: You can split a string and convert it to integer values by either using a list comprehension or Python’s built-in map() function.

Minimal Example

phone = '91-9567-123456'
# Method 1
print(list(map(int, phone.split('-'))))
# OUTPUT: [91, 9567, 123456]

# Method 2
print([int(x) for x in phone.split("-")])
# OUTPUT: [91, 9567, 123456]

Problem Formulation

๐Ÿ“œProblem: Given a string containing integers separated by a specific delimiter. How will you split  the string using the given delimiter and store the integer strings into a list. Note that the items in the resultant list should be integers and not strings.  

Example: Consider that you have been given an IP address as the string. Extract each number from the given IP and store them in a list using โ€œ.โ€ as the delimiter.

Given: 
ip = "192.158.1.38"
Expected Output: 
[192, 158, 1, 38]

Now that we have an overview of our problem, let us dive into the methods without any further ado.


Method 1: Using List Comprehension

Prerequisite: List comprehension is a compact way of creating lists. The simple formula is [expression + context].
Expression: What to do with each list element?
– Context: What elements to select? The context consists of an arbitrary number of for and if statements.
Example: [x for x in range(3)] creates the list [0, 1, 2].

๐ŸŒŽRead more here: List Comprehension in Python โ€” A Helpful Illustrated Guide

Approach: You can use the split(".") function to split the given string using the given delimiter โ€œ.โ€ which stores the split string as items in a list. Then use a for loop to iterate over the split strings which are stored as items in a list and typecast them into integer values one by one. All of this can be done in a single line using a list comprehension.

Code:

ip = "192.158.1.38"
res = [int(x) for x in ip.split(".")]
print(res)
# [192, 158, 1, 38]

Method 2: Using map

Approach: In this method, we will use Pythonโ€™s built-in map() function. Initially we have to split the string using the split() function at the given delimiter which is โ€œ.โ€ in this case. This will give us a list containing the split strings. This list serves as the iterator argument within the map function and each split string is then passed the integer function contained within the map method as the first argument. The int function allows you to convert the split strings to integer values. The map function returns a map object which can be converted into a list and displayed as the final output.

Code:

ip = "192.158.1.38"
res = list(map(int, ip.split('.')))
print(res)
# [192, 158, 1, 38]

Reader’s Digest
The map() function transforms one or more iterables into a new one by applying a โ€œtransformator functionโ€ to the i-th elements of each iterable. The arguments are the transformator function object and one or more iterables. If you pass n iterables as arguments, the transformator function must be an n-ary function taking n input arguments. The return value is an iterable map object of transformed, and possibly aggregated, elements.

๐ŸŒŽRead more here: Python map() โ€” Finally Mastering the Python Map Function [+Video]

A Quick Comparison Between The Two Methods Used

Let’s run a quick test on both the methods to test the efficiency of the two functions. The quick test code as shown below indicates that map() function wins the race in terms of efficiency regarding the time taken to complete the operation (building a list of integers from a value-splitted string).ย 

However, using list comprehension method to split a string and convert into integers is a more lucid and easy to understand approach. Also, it does not involve the usage of complex built-in functions like map() which can often be daunting for beginners. 

Code:

import time
ip = "192.158.1.38"
start = time.time()
res_1 = [int(x) for x in ip.split(".")]
time.sleep(2)
print(res_1)
end = time.time()
print(end - start)

start = time.time()
res_2 = list(map(int, ip.split('.')))
time.sleep(2)
print(res_2)
end = time.time()
print(end - start)

 Output:

[192, 158, 1, 38]
2.0009641647338867
[192, 158, 1, 38]
2.00071382522583

Note: The difference in time taken between the two functions is negligible. Hence, it does not matter much unless the input data is very large.

Related Questions

๐Ÿ’ŽPython Split String by Space and Convert to Int

Challenge: Given a string containing integers separated by space. How will you split  the string using space as the given delimiter ” ” and store the integer strings into a list?

# Input 
x = '1 2 3 4 56 78 9'
# Expected Output
[1, 2, 3, 4, 56, 78, 9]

Solution:

x = '1 2 3 4 56 78 9'
res = list(map(int, x.split(' ')))
print(res)

๐Ÿ’ŽPython Split String by Comma and Convert to Int

Challenge: Given a string containing integers separated by comma. How will you split  the string using the given delimiter “,” and store the integer strings into a list.

# Input: 
no = '3,77,400'
# Expected Output:
[3, 77, 400]

Solution:

no = '3,77,400'
res = list(map(int, no.split(',')))
print(res)

Conclusion

We have successfully solved the given problem using different approaches. I hope this article helped you in your Python coding journey. Please subscribe and stay tuned for more interesting articles and solutions. Happy Coding!

๐ŸŒŽRecommended Read: How to Convert a String List to an Integer List in Python