2013-11-09 5 views
-1

Как бы вы описали следующий результат?Python: преобразовать список кортежей в плоский список

tuple_list = [('a', 1), ('b', 3), ('c', 2), ...] 
def flatten_tuple(tuple_list): 
    magic_happens here 
    return flat_list 
flat_list = ['a', 1, 'b', 3, 'c', 2, ...] 

Это простая задача решить так:

def flatten_tuple(tuple_list): 
    flat_list = [] 
    for a, b in tuple_list: 
     flat_list.append(a) 
     flat_list.append(b) 
    return flat_list 

я упускаю что-то, может сглаживаться список кортежей без итерация самого списка?

+0

Вы имеете в виду встроенную функцию? – thefourtheye

+0

Извинения за задание двойного вопроса. Мои поисковые усилия были явно недостаточными. – Cole

ответ

1

Вы можете выровнять его, используя список понимание, как этот

tuple_list = [('a', 1), ('b', 3), ('c', 2)] 
def flatten_tuple(tuple_list): 
    #Method 1 
    #import itertools 
    #return [item for item in itertools.chain.from_iterable(tuple_list)] 

    #Method 2 
    return [item for tempList in tuple_list for item in tempList] 

print flatten_tuple(tuple_list) 

Или от этого прекрасного ответа https://stackoverflow.com/a/952952/1903116 (Примечание wo rks Только в Python 2)

tuple_list = [('a', 1), ('b', 3), ('c', 2)] 
def flatten_tuple(tuple_list): 
    return list(reduce(lambda x,y: x + y, tuple_list)) 

print flatten_tuple(tuple_list) 
+1

Можете добавить, что последнее решение работает только в Python 2.x. – iCodez

+0

@iCodez Done :) – thefourtheye

2

Использование itertools.chain:

from itertools import chain 

tuple_list = [('a', 1), ('b', 3), ('c', 2)] 

list(chain.from_iterable(tuple_list)) 
Out[5]: ['a', 1, 'b', 3, 'c', 2] 

Или вложенный список понимание:

[elem for sub in tuple_list for elem in sub] 
Out[6]: ['a', 1, 'b', 3, 'c', 2] 
Смежные вопросы