Как сгладить кортеж в python

У меня есть следующий элемент списка, и список имеет длину 100 элементов.

[(50, (2.7387451803816479e-13, 219))]

Как преобразовать каждый элемент, чтобы выглядеть так?

[(50, 2.7387451803816479e-13, 219)]

Ответы

Ответ 2

Новое в Python 3.5 с дополнительной распаковкой, введенной в PEP 448, вы можете использовать выделенные выражения в литералах набора, чтобы вы могли использовать

>>> l = [(50, (2.7387451803816479e-13, 219)), (40, (3.4587451803816479e-13, 220))]
>>> [(a, *rest) for a, rest in l]
[(50, 2.738745180381648e-13, 219), (40, 3.458745180381648e-13, 220)]

Это может быть полезно, если у вас есть вложенный кортеж, используемый для ведения записей со многими элементами, которые вы хотите сгладить.

Ответ 3

Вы можете получить результат таким образом

>> example =  [(50, (2.7387451803816479e-13, 219))]
>>> [tuple(x[:1]) + (x[1]) for x in example] 
[(50, 2.738745180381648e-13, 219)]

Ответ 4

Совместимый с Python 2.7 способ сделать то, что предлагает Митч для Python 3.5.

>>> example =  [(50, (2.7387451803816479e-13, 219)),
            (100, (3.7387451803816479e-13, 218))]
>>> [(lambda *x: x)(k, *r) for k, r in example]
[(50, 2.738745180381648e-13, 219), (100, 3.7387451803816477e-13, 218)]

Преимущество этого метода заключается в том, что вам не нужно искать имя переменной для каждого значения внутреннего кортежа, чтобы сгладить, как в принятом ответе. Если есть два или три элемента, это не проблема, но представьте, что есть значения десятых или более...

Ответ 5

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

import type

def flatten(T):
    if type(T) != types.TupleType: return (T,)
    elif len(T) == 0: return ()
    else: return flatten(T[0]) + flatten(T[1:])

Как это работает:

  • Сначала он будет проверяться, если тип кортеж, если нет, он "кортежирует" аргумент
  • Вторая строка возвращает пустой кортеж, если кортеж пуст
  • Третья строка выдает первый элемент и вызывает функцию рекурсивно

Самое приятное в этом решении:

  • Нет необходимости знать структуру данного кортежа
  • Кортеж может быть вложен произвольно глубоко
  • Работает в Python 2.7

Код слегка адаптирован из следующего источника:
https://mail.python.org/pipermail/tutor/2001-April/005025.html

Надеюсь, это поможет кому-то:)