2010-11-30 22 views
4

Lors de l'extraction des données à partir d'une liste de cette façonComment déballer une liste?

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

Je reçois un tableau et deux variables après, comme cela devrait être prévu:

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

je dois manipuler la liste de sorte que le résultat final est

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

Comment? Je vous remercie.

P.S. Oui, je sais que je peux écrire le premier élément comme line[0], line[1], line[2], mais je pense que c'est une solution assez maladroite.

+0

vous passez ce résultat quelque part ou vous avez juste besoin d'une variable? – SilentGhost

+1

Regardez la fonction aplatie décrite dans les documents en ligne d'itertools –

+0

est-ce que vous "recevez" un tableau de la même taille toujours? – SilentGhost

Répondre

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

Sortie:

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

même problème que pour le code de la tueuse – SilentGhost

+0

tuple (chaîne (ligne [0: 3], [ligne [3] [: 2]], [ligne [ 3] [2:]])) (notez que j'ai mis les deux derniers éléments dans des tableaux de leur choix) semble faire l'affaire. Je vous remercie. – dpq

0

Cette fonction

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

source: http://www.testingreflections.com/node/view/4930

+0

wtf? Quelle est cette absurdité? J'étais en train de commenter "Vous pouvez utiliser la fonction de fusion". Mais je suppose que cela s'applique également à la version éditée. – SilentGhost

+0

désolé je l'ai édité :) – slayerIQ

+0

doesnt cette fonction retourner ce que op veut? – slayerIQ

1

Essayez ceci.

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

NOTE: Je pense qu'il ya une affaire drôle dans votre logique de découpage en tranches. Si [2:] renvoie un caractère, [: 2] doit renvoyer 2 caractères. Veuillez indiquer votre ligne d'entrée.

+0

E.g. 'a B c d'. [2:] retourne 'cd', [: 2] retourne 'ab', je ne comprends pas ce qui te dérange dans cette partie. – dpq

+0

@david: le fait que vous avez posté 'c' et 'd' au lieu de 'cc' et 'dd'. Qu'est-ce qui est censé être dans votre liste finale? 'cc' ou 'c', 'c'? – SilentGhost

+0

Cela ne correspond pas à votre sortie dans la question. Les tranches et la sortie ne sont pas valides. 'd' ne peut pas arriver pour [: 2] si 'e' arrive pour [2:]. – kevpie

1

réponse évidente: Au lieu de votre première ligne, faire:

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

qui fonctionne en supposant que line[0:3] est une liste. Sinon, vous devrez peut-être faire quelques ajustements mineurs.

+1

@david: c'est la plainte la plus ridicule jamais publiée sur ce site. – SilentGhost

+0

Je vois. Supprimé afin de ne plus irriter personne. – dpq

+2

@David: Heh, maintenant je suis curieux de savoir ce que c'était! –

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

cela devrait fonctionner pour tout niveau d'imbrication