2013-02-10 4 views
1

Compte tenu de ce qui suit:zip éléments alternatifs

list = [('[', "'Conrad Clifton'"), ('[', "'Rippa'")] 

Comment pourrais-je obtenir la liste sous la forme

[('Conrad Clifton', 'Rippa')] 

Quelque chose de similaire à:

new_list = [] 
for first, second in list: 
    new_list.append(second) 

Et puis convertir la liste dans un tuple. Y a-t-il un moyen de le faire avec une compréhension de liste?

+3

mauvaise idée d'utiliser 'liste' comme nom ... –

+0

'tuple (deuxième pour la première, la deuxième liste)'? – millimoose

+0

Le code que vous avez posté donnerait '[" 'Conrad Clifton' "," 'Rippa' "]', pas '[('Conrag Clifton', 'Rippa')]'. Lequel voulez-vous? – Johnsyweb

Répondre

5
>>> tuple(second for first, second in li) 
("'Conrad Clifton'", "'Rippa'") 

Et ne nommez pas votre liste comme list. C'est un type intégré. Vous ne devez pas nommer votre variable avec des noms intégrés.

+0

Pourquoi construire une liste intermédiaire? Semble un peu gaspilleuse. –

+0

@WaleedKhan. Oui en effet. J'ai oublié de supprimer tout en ajoutant tuple à la compréhension de la liste. –

3
your_output = tuple(y for x,y in your_input) 
+0

Haha, vraiment bien! – cnicutar

3

Une solution alternative (2.x python):

>>> x = [('[', "'Conrad Clifton'"), ('[', "'Rippa'")] 
>>> zip(*x)[1] 
("'Conrad Clifton'", "'Rippa'") 

Évitez d'utiliser list comme nom de variable, il ombres le nom intégré.

0

Vous pouvez également utiliser operator.itemgetter:

>>> import operator 
>>> l = [('[', "'Conrad Clifton'"), ('[', "'Rippa'")] 
>>> map(operator.itemgetter(1), l) 
    ["'Conrad Clifton'", "'Rippa'"] 
Questions connexes