-1

次の結果をどのようにコーディングしますか?

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

リスト自体を繰り返し処理せずにタプルリストを平坦化できるものが欠けていますか?

4

2 に答える 2

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]
于 2013-11-09T18:52:01.660 に答える
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は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)
于 2013-11-09T18:52:48.670 に答える