Skip to content

How to Sum and Join List of Strings in Python

Learn practical methods to sum numeric strings in a mixed list, efficiently join strings with separators, and calculate digit sums within strings using Python's built-in functions.

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']

my_str = ''.join(my_list)
print(my_str)  # Output: abc

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.

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

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.
Navigation