Skip to main content

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 using int(). If the conversion is successful, the integer is added to the total variable.
  • If the int() method raises a ValueError, meaning that the item is not a valid integer, the except block is executed. In this case, we are using pass 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.

note

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
note

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.