2010-06-30 6 views
1

Salut à tous. Essayer d'obtenir un peu plus efficace avec des listes en Python mais je ne peux pas sembler comprendre si je peux faire ce que je veux ou même si cela vaut la peine de comprendre.Diviser les éléments d'une liste en deux et en ajouter un à une autre liste

flux est une liste. Chaque élément de la liste est quelque chose comme:

10,123400FFFE001DB9AA

Je suis en train de se rendre à la deuxième partie de chaque élément après la virgule je lance donc dans la division liste chacun et le stocker dans température. Je leur ajoute temp [1] à l'autre liste appelée incoming_data.

Je voudrais combiner la ligne qui sépare et sauve à température et à la liste ajoute de incoming_data en une seule ligne, quelque chose comme:

incoming_data.append (item.split (« »))

Je sais que la syntaxe ci-dessus est totalement incorrecte, mais j'espère que le message sera compris. Voici mon code actuel.

D'autres critiques sont les bienvenus comme d'habitude. Merci!

#init the final list 
incoming_data = list() 

#iterate over each item in the list 
for item in stream: 

     #clear the temp variable for next time 
     temp = '' 

     #we sometimes get blank items in the stream list so check first 
     if item <> '': 

      #split each item in the stream list using the comma as delimiter 
      temp = item.split(',') 

      #append to the final data lis 
      incoming_data.append(temp[1]) 

Répondre

6
incoming_data = [item.split(",")[1] for item in stream if item] 

Les rejets if item les lignes vides dans stream.

+0

Ah, +1 pour attraper la ligne vide. –

1

Vous pouvez utiliser Python-dandy pratique list comprehensions faire cela en une ligne:

incoming_data = [ item.split(',')[1] for item in stream ] 
+0

Ninja'ed! Et la réponse de @ RichardFearn est préférable d'inclure le 'if item' à la fin! – ewall

+1

Attention aux lignes vierges :-) (Voir ma réponse.) –

1

En fait, vous pouvez faire incoming_data.append(item.split(',')[1]). Si vous voulez vraiment vous pouvez combiner tout le tralala en une seule ligne en utilisant une compréhension de la liste (la mienne est maintenant corrigée pour la ligne blanche grâce à Richard):

incoming_data = [item.split(',')[0] for item in stream if item]

Bien que si vous diffusez en fait quelque chose que vous devrait regarder generators(PDF) - ils sont absolument incroyables.

Questions connexes