2010-11-30 8 views
4

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

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], но я думаю, что это довольно неудобное решение.

+0

вы проходя этот результат где-то или просто нужна переменная? – SilentGhost 2010-11-30 18:13:59

+1

Посмотрите на функцию сглаживания, описанную в онлайн-документах itertools – 2010-11-30 18:14:01

+0

Всегда ли вы получаете массив одинакового размера? – SilentGhost 2010-11-30 18:24:40

ответ

4
from itertools import chain 
print tuple(chain(['a', 'b', 'c'], 'd', 'e')) 

Выход:

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

Эта функция

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

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

+0

wtf? что это за глупость? Я действительно комментировал «Вы можете использовать функцию слияния». Но я предполагаю, что это в равной степени применяется к отредактированной версии. – SilentGhost 2010-11-30 18:15:58

1

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

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

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

1

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

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

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

0
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)) 

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