Подтвердить что ты не робот

Преобразовать список кортежей в список?

Как преобразовать

[(1,), (2,), (3,)]

к

[1, 2, 3]
4b9b3361

Ответ 1

Использование простого понимания списка:

e = [(1,), (2,), (3,)]
[i[0] for i in e]

предоставит вам:

[1, 2, 3]

Ответ 2

Решение @Levon отлично работает для вашего случая.

В качестве побочного примечания, если у вас есть переменное количество элементов в кортежах, вы также можете использовать chain из itertools.

>>> a = [(1, ), (2, 3), (4, 5, 6)]
>>> from itertools import chain
>>> list(chain(a))
[(1,), (2, 3), (4, 5, 6)]
>>> list(chain(*a))
[1, 2, 3, 4, 5, 6]
>>> list(chain.from_iterable(a)) # More efficient version than unpacking
[1, 2, 3, 4, 5, 6]

Ответ 3

Вот еще одна альтернатива, если вы можете иметь переменное количество элементов в кортежах:

>>> a = [(1,), (2, 3), (4, 5, 6)]
>>> [x for t in a for x in t]
[1, 2, 3, 4, 5, 6]

В основном это сокращенная форма следующих циклов:

result = []
for t in a:
    for x in t:
        result.append(x)

Ответ 4

>>> a = [(1,), (2,), (3,)]
>>> zip(*a)[0]
(1, 2, 3)

Для списка:

>>> list(zip(*a)[0])
[1, 2, 3]

Ответ 5

Вы также можете использовать функцию sum следующим образом:

e = [(1,), (2,), (3,)] 
e_list = list(sum(e, ()))

И он также работает со списком списков, чтобы преобразовать его в один список, но вам нужно будет использовать его следующим образом:

e = [[1, 2], [3, 4], [5, 6]]
e_list = list(sum(e, []))

Это даст вам [1, 2, 3, 4, 5, 6]

Ответ 6

Всегда есть способ извлечь список из другого списка с помощью ... for... in.... В этом случае это будет:

[i[0] for i in e]

Ответ 7

>>> a = [(1,), (2,), (3,)]
>>> b = map(lambda x: x[0], a)
>>> b
[1, 2, 3]

С python3 вы должны поместить функцию list (..) в выходные данные map (..), т.е.

b = list(map(lambda x: x[0], a))

Это лучшее решение в одну строку с использованием встроенных функций Python.

Ответ 8

Вы также можете распаковать кортеж в понимании списка:

e = [(1,), (2,), (3,)]
[i for (i,) in e]

все равно даст:

[1, 2, 3]

Ответ 9

Используя оператор или сумму

>>> from functools import reduce ### If python 3
>>> import operator
>>> a = [(1,), (2,), (3,)]
>>> list(reduce(operator.concat, a))
[1, 2, 3]

(ИЛИ ЖЕ)

>>> list(sum(a,()))
[1, 2, 3]
>>> 

Если в python> 3, пожалуйста, сделайте так, чтобы импорт Reduce из functools, как, например, from functools import reduce

https://docs.python.org/3/library/functools.html#functools.reduce

Ответ 10

Один лайнер yo!

list(*zip(*[(1,), (2,), (3,)]))

Ответ 11

В этих ситуациях мне нравится делать:

a = [(1,), (2,), (3,)]
new_a = [element for tup in a for element in tup]

Это работает, даже если ваши кортежи имеют более одного элемента. Это эквивалентно выполнению этого:

a = [(1,), (2,), (3,)]
new_a = []
for tup in a:
    for element in tup:
        new_a.append(element)