в Python, как объединить список кортежей в один список? [дубликат]

этот вопрос уже есть ответ здесь:

следуя моему предыдущему вопросу как сгруппировать элементы списка в кортеж?

Если у меня есть список кортежей, например

a = [(1,3),(5,4)]

как я могу распаковать кортежей и переформатировать его в один список

b = [1,3,5,4]

Я думаю, что это также связано с iter функция, но я действительно не знаю, как это делать. Пожалуйста, просветите меня.

5 ответов


b = [i for sub in a for i in sub]

это сделает трюк.


In [11]: list(itertools.chain(*a))
Out[11]: [1, 3, 5, 4]

Если вам просто нужно перебрать 1, 3, 5, 4, вы можете избавиться от list() звонок.


import itertools
b = [i for i in itertools.chain(*[(1,3),(5,4)])]

просто повторите список a и распакуйте кортежи:

l = []
for x,y in a:
   l.append(x)
   l.append(y)

иначе:

a = [(1,3),(5,4)]
b = []

for i in a:
    for j in i:
        b.append(j)

print b

это будет обрабатывать только кортежи внутри списка (a) tho. Вам нужно добавить операторы if-else, если вы хотите также анализировать свободные переменные, например;

a = [(1,3),(5,4), 23, [21, 22], {'somevalue'}]
b = []

for i in a:
    if type(i) == (tuple) or type(i) == (list) or type(i) == (set):
        for j in i:
            b.append(j)
    else:
        b.append(i)

print b