2016-12-02 3 views
-3

J'ai une liste de tuples comme ceci:Python modifier tuples dans une liste

myList=[(u"hell world", 10),(u"hello mom", 20), (u"hello dad","5")] 

J'ai besoin de modifier chaque tuple afin de récupérer une liste comme ceci:

mySecondList= [(u"hell",u"world","10"),(u"hello",u"mom","20"), (u"hello",u"dad","5")] 

Comment Je le fais?

+6

Les tuples sont immuables, donc vous devrez retourner une liste avec de nouveaux tuples. – Tobias

+1

Publiez vos tentatives. –

+0

Essayez d'utiliser la méthode chaîne '.split'. Si vous êtes coincé, postez votre code et expliquez exactement ce qu'il fait mal. –

Répondre

0

Les tuples sont un type immuable, vous ne pourrez donc pas modifier le contenu une fois créé. Peut-être devriez-vous essayer des listes mutables.

+0

Merci Tobias! Merci Moinuddin Quadri! Les deux réponses fonctionnent bien !!! – CosimoCD

1

Comme je l'ai écrit dans mon commentaire tuples sont immuables, mais vous pouvez utiliser quelque chose comme le code suivant:

def modify(lst): 
    ret = [] 
    for tpl in lst: 
     ret.append(tuple([tpl[0].split(' '), tpl[1]])) 
    return ret 

Ou vous pouvez utiliser un générateur et le transmettre au constructeur tuple:

new_list = tuple(item[0].split(' ') + [item[1]]) for item in myData) 
4

vous pouvez obtenir le comportement souhaité à l'aide la compréhension liste expression:

[tuple(item[0].split() + [str(item[1])]) for item in myList] 

qui retournera:

[(u'hell', u'world', '10'), (u'hello', u'mom', '20'), (u'hello', u'dad', '5')] 

Remarque: tuple sont immuables dans la nature. Vous ne pouvez pas modifier l'objet tuple existant. Ici, je retourne une nouvelle liste avec des objets tuple nouvellement créés

+0

@AvinashRaj Il utilise Python 2 ;-) EDIT: Ah, ça ne fait rien, le troisième composant est un bytestring régulier. – Tobias