How to Sum and Join List of Strings in Python
This guide explores various techniques for working with lists of strings in Python. We will cover summing numeric strings, joining strings together, and summing digits within a string. You will learn when to use each approach and how to apply them effectively.
Summing Numeric Strings in a List
When you have a list of strings, some of which represent numbers, you need to extract and sum the numeric values. There are several ways to approach this:
1. Using isinstance()
and isdigit()
This method checks both for actual integers and strings that represent integers.
a_list = ['1', 'a', '2', 'c', '3', 4, 5]
total = 0
for item in a_list:
if isinstance(item, int) or (
hasattr(item, 'isdigit') and item.isdigit()
):
total += int(item)
print(total) # Output: 15
Explanation:
- The code loops through the items in the list.
isinstance(item, int)
will return true if the current item is an integer.hasattr(item, 'isdigit') and item.isdigit()
will check if the current item is a string containing only digits.- If any of these conditions is met, the item is converted to an int and added to the total.
2. Using try
/except
Blocks
This method attempts to convert each item to an integer and catches the ValueError
that occurs for non-numeric strings:
a_list = ['1', 'a', '2', 'c', '3', 4, 5]
total = 0
for item in a_list:
try:
total += int(item)
except ValueError:
pass
print(total) # Output: 15
Explanation:
- The
try
block tries to convert each list item into an integer usingint()
. If the conversion is successful, the integer is added to thetotal
variable. - If the
int()
method raises aValueError
, meaning that the item is not a valid integer, theexcept
block is executed. In this case, we are usingpass
which just skips the problematic item and continues to the next one.
Joining Strings in a List
The str.join()
method is the most efficient and Pythonic way to combine a list of strings into a single string.
1. Using str.join()
Call the method on the desired separator string.
my_list = ['a', 'b', 'c']
# Without a separator
my_str = ''.join(my_list)
print(my_str) # Output: abc
# With a space separator
my_str = ' '.join(my_list)
print(my_str) # Output: a b c
The str.join()
method takes an iterable, and joins the strings using the string it is called on as a separator.
str.join()
raises a TypeError
if the iterable contains non-string values.
2. Converting Non-String Values Before Joining
To join a list containing non-string values, use map(str, my_list)
to convert all values to strings before passing them to join()
:
my_list = ['a', 1, 'b', 2, 'c', 3]
my_str = ''.join(map(str, my_list))
print(my_str) # Output: a1b2c3
The map()
method applies a given function to all the items of the given iterable. In this case, the str
class is applied to all elements to convert them to strings.
Concatenating Strings with a Loop
An alternative to str.join()
for joining strings is to concatenate strings using a loop:
my_list = ['tutorial', 'reference', 'com']
my_str = ''
for item in my_list:
my_str += item
print(my_str) # Output: tutorialreferencecom
While this approach works, str.join()
is generally more efficient, especially for long lists, because strings are immutable and repeated string concatenation with +=
causes the creation of new string objects on every iteration. For this reason, str.join()
is preferrable if it is possible for your use case.
Summing Digits Within a String
To sum the digits within a string, use a generator expression with the sum()
function:
my_str = '1ab2c3'
total = sum(int(char) for char in my_str if char.isdigit())
print(total) # Output: 6
my_str = '246'
total = sum(int(d) for d in my_str)
print(total) # Output: 12
- The generator expression
(int(char) for char in my_str if char.isdigit())
iterates through each character in the string. - The generator expression
(int(d) for d in my_str)
assumes that each character is a digit. if char.isdigit()
ensures that only characters that are digits are processed.- The
sum()
function then adds up the converted integer values.