Given a list of strings. Join the first with the second string, the second with the third, and so on. The one-liner
[lst[i] + lst[i+1] for i in range(0, len(lst), 2)] solves the problem by using the range function to iterate over every other index
i=0, 2, 4, 5, ... to concatenate the
i-th and the
i+1-th elements in a list comprehension expression with
lst[i] + lst[i+1].
You may already know the normal join function in Python:
Intro: Python Join
Problem: Given a list of elements. How to join the elements by concatenating all elements in the list?
Example: You want to convert list
['learn ', 'python ', 'fast'] to the string
'learn python fast'.
Quick Solution: to convert a list of strings to a string, do the following.
- Call the
''.join(list)method on the empty string
''that glues together all strings in the
listand returns a new string.
- The string on which you call the join method is used as a delimiter between the list elements.
- If you don’t need a delimiter, just use the empty string
Code: Let’s have a look at the code.
lst = ['learn ', 'python ', 'fast'] print(''.join(lst))
The output is:
learn python fast
However, what if you want to do something different. Rather than joining all strings in the list to a single string, you want to join the strings in the list in pairs.
Problem: Python Join List Pairs
Problem: Given a list of strings. Join the first with the second string, the second with the third, and so on.
Example: Let’s consider the following minimal example:
['x', 'y', 'v', 'w']
Is there any simple way to pair the first with the second and the third with the fourth string to obtain the following output?
Note that the length of the strings in the list is variable so the following would be a perfectly acceptable input:
['aaaa', 'b', 'cc', 'dddd', 'eee', 'fff']
You can play with all three methods before diving into each of them:
Exercise: What’s the most Pythonic method?
Method 1: Zip() + List Comprehension
You can use the following smart one-liner solution
lst = ['aaaa', 'b', 'cc', 'dddd', 'eee', 'fff'] out = [x + y for x,y in zip(lst[::2], lst[1::2])] print(out) # ['aaaab', 'ccdddd', 'eeefff']
The one-liner uses the following strategy:
- Obtain two slices
lst[1::2]of the original list over every other element starting from the first and the second elements, respectively. If you need to refresh your slicing skills, check out my detailed blog article.
- Zip the two slices to a sequence of tuples using the
zip(...)function. This aligns the first with the second elements from the original list, the third with the forth, and so on. To refresh your
zip()skills, check out my blog tutorial here.
- Use list comprehension to iterate over each pair of values
x,yand concatenate them using list concatenation
x+y. For a refresher on list comprehension, check out this free tutorial—and for a refresher on list concatenation, check out this one.
Method 2: Iterator + List Comprehension
You can also use an iterator to accomplish this:
lst = ['aaaa', 'b', 'cc', 'dddd', 'eee', 'fff'] it = iter(lst) out = [x + next(it, '') for x in it] print(out) # ['aaaab', 'ccdddd', 'eeefff']
Here’s the idea:
- Create an iterator object it using the built-in function
- Use list comprehension to go over each element in the iterator.
- Concatenate each element with the return value of calling the
next()function on the iterator. This ensures that the iterator moves one position further iterating over the list. So, the next element
xwon’t be a duplicate.
Method 3: Use List Comprehension with Indexing
This method is the most straightforward one for Python beginners:
lst = ['aaaa', 'b', 'cc', 'dddd', 'eee', 'fff'] out = [lst[i] + lst[i+1] for i in range(0, len(lst), 2)] print(out) # ['aaaab', 'ccdddd', 'eeefff']
The idea is simply to use the range function to iterate over every other index
i=0, 2, 4, 5, ... to access the
i-th and the
i+1-th elements at the same time in the expression statement of list comprehension (to concatenate those with
lst[i] + lst[i+1]).
Where to Go From Here?
Enough theory. Let’s get some practice!
Coders get paid six figures and more because they can solve problems more effectively using machine intelligence and automation.
To become more successful in coding, solve more real problems for real people. That’s how you polish the skills you really need in practice. After all, what’s the use of learning theory that nobody ever needs?
You build high-value coding skills by working on practical coding projects!
Do you want to stop learning with toy projects and focus on practical code projects that earn you money and solve real problems for people?
🚀 If your answer is YES!, consider becoming a Python freelance developer! It’s the best way of approaching the task of improving your Python skills—even if you are a complete beginner.
If you just want to learn about the freelancing opportunity, feel free to watch my free webinar “How to Build Your High-Income Skill Python” and learn how I grew my coding business online and how you can, too—from the comfort of your own home.
While working as a researcher in distributed systems, Dr. Christian Mayer found his love for teaching computer science students.
To help students reach higher levels of Python success, he founded the programming education website Finxter.com that has taught exponential skills to millions of coders worldwide. He’s the author of the best-selling programming books Python One-Liners (NoStarch 2020), The Art of Clean Code (NoStarch 2022), and The Book of Dash (NoStarch 2022). Chris also coauthored the Coffee Break Python series of self-published books. He’s a computer science enthusiast, freelancer, and owner of one of the top 10 largest Python blogs worldwide.
His passions are writing, reading, and coding. But his greatest passion is to serve aspiring coders through Finxter and help them to boost their skills. You can join his free email academy here.