2014-09-10 3 views
-1

Как бы вы пропустили каждый элемент в списке в python. Например, если у меня есть список:цикл через каждый элемент в списке

list = ["abc",3,(10,(11,12))] 

Я хотел бы иметь дробить список в: ['a','b','c',3,10,11,12]

Прямо сейчас у меня есть:

def combinelist(list): 
    l = [] 
    for item in list: 
     l.append(item) 
    return l 

Однако это только возвращает точно такой же список. Как бы я углубился в каждый элемент в списке и разделил каждый элемент? Спасибо за помощь!

+0

@ Michael0x2a не совсем , то, что показывает OP, не является списком итераций (вы не можете перебирать '3') –

+0

@DavidRobinson - ах, вы правы. Я этого не видел. – Michael0x2a

+0

Я думаю, что вы хотели 'extend', а не' append' здесь. 'lst.append ([1,2,3])' будет добавлять список '[1,2,3]' до конца, но 'lst.extend ([1,2,3])' добавит три отдельные значения '1',' 2' и '3' до конца. Однако это вызовет исключение, когда вы попробуете его на '3', и оно будет только сглаживать' (10, (11,12)) 'в два значения' 10' и '(11,12)'. Вот почему ответы в связанном вопросе либо используют рекурсию, либо цикл. – abarnert

ответ

1

Ну, я не знаю, элегантный способ закодировать его, так что ...

l = ["abc",3,('x','y')] 

o = [] 
for i in l: 
    if isinstance(i, str): 
     o.extend(list(i)) 
    elif isinstance(i, (tuple, list)): 
     o.extend(i) 
    else: 
     o.append(i) 

print o 

Или:

o = [] 
for i in l: 
    try: 
     o.extend(list(i)) # can it be casted to sequence? 
    except TypeError: 
     o.append(i) 
print o 

Или даже:

o = [] 
for i in l: 
    if isinstance(i, (str, list, tuple)): 
     o.extend(list(i)) 
    else: 
     o.append(i) 
print o