Как распаковать список? - PullRequest
       11

Как распаковать список?

4 голосов
/ 30 ноября 2010

При извлечении данных из списка таким способом

line[0:3], line[3][:2], line[3][2:]

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

(['a', 'b', 'c'], 'd', 'e')

Мне нужно манипулировать списком, чтобы конечный результат был

('a', 'b', 'c', 'd', 'e')

Как? Спасибо.

P.S. Да, я знаю, что могу записать первый элемент как line[0], line[1], line[2], но я думаю, что это довольно неловкое решение.

Ответы [ 5 ]

4 голосов
/ 30 ноября 2010
from itertools import chain
print tuple(chain(['a', 'b', 'c'], 'd', 'e'))

Выход:

('a', 'b', 'c', 'd','e')
1 голос
/ 30 ноября 2010

Попробуйте это.

line = ['a', 'b', 'c', 'de']
tuple(line[0:3] + [line[3][:1]] + [line[3][1:]])
('a', 'b', 'c', 'd', 'e')

ПРИМЕЧАНИЕ: Я думаю, что в вашей логике нарезки есть забавный бизнес.Если [2:] возвращает какие-либо символы, [: 2] должно возвращать 2 символа.Пожалуйста, укажите вашу строку ввода.

1 голос
/ 30 ноября 2010

Очевидный ответ: Вместо вашей первой строки выполните:

line[0:3] + [line[3][:2], line[3][2:]]

Это работает при условии, что line[0:3] является списком.В противном случае вам может потребоваться внести незначительные корректировки.

0 голосов
/ 30 ноября 2010
def is_iterable(i):
    return hasattr(i,'__iter__')

def iterative_flatten(List):
    for item in List:
        if is_iterable(item):
            for sub_item in iterative_flatten(item):
                yield sub_item
        else:
            yield item

def flatten_iterable(to_flatten):
    return tuple(iterative_flatten(to_flatten))

это должно работать для любого уровня вложенности

0 голосов
/ 30 ноября 2010

Эта функция

def merge(seq):
    merged = []
    for s in seq:
        for x in s:
            merged.append(x)
    return merged 

источник: http://www.testingreflections.com/node/view/4930

...