Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Comprehension for flattening a sequence of sequences? [duplicate]

If I have sequence of sequences (maybe a list of tuples) I can use itertools.chain() to flatten it. But sometimes I feel like I would rather write it as a comprehension. I just can't figure out how to do it. Here's a very construed case:

Let's say I want to swap the elements of every pair in a sequence. I use a string as a sequence here:

>>> from itertools import chain >>> seq = '012345' >>> swapped_pairs = zip(seq[1::2], seq[::2]) >>> swapped_pairs [('1', '0'), ('3', '2'), ('5', '4')] >>> "".join(chain(*swapped_pairs)) '103254' 

I use zip on the even and odd slices of the sequence to swap the pairs. But I end up with a list of tuples that now need to be flattened. So I use chain(). Is there a way I could express it with a comprehension instead?

If you want to post your own solution to the basic problem of swapping elements of the pairs, go ahead, I'll up-vote anything that teaches me something new. But I will only mark as accepted an answer that is targeted on my question, even if the answer is "No, you can't.".

like image 574
PEZ Avatar asked Jan 19 '09 10:01

PEZ


People also ask

How do you flatten list list comprehension?

The itertools. from_iterable() method. The result of this function call is passed as the argument for the list() method which converts the sequence into a list. The final flattened list is printed using the code print("Flatten List:",listflat).

How do you flatten a shallow list in Python?

A simple and straightforward solution is to append items from sublists in a flat list using two nested for loops. A more compact and Pythonic solution is to use chain() function from itertools module.


1 Answers

With a comprehension? Well...

>>> seq = '012345' >>> swapped_pairs = zip(seq[1::2], seq[::2]) >>> ''.join(item for pair in swapped_pairs for item in pair) '103254' 
like image 140
nosklo Avatar answered Sep 25 '22 02:09

nosklo