2017-09-24 2 views
0

J'ai une liste de tuples qui contient plusieurs tuples (1 à plus, nombre variable). Par exemple,comment indexer le dernier élément d'un tuple dans une liste de tuples

[(5, 5), ((5, 5), (4, 5)), ((5, 5), (4, 2), (3, 3))] 

Je voudrais indexer le dernier élément de chaque tuple,

#ideal result 
(5, 5,) (4, 5) (3, 3) 

J'ai essayé ce qui suit

if len(n) == 1: #n is the iterator 
     print n[0] 
    else 
     print n[-1] 

cependant, pour le premier élément, il impression 5 au lieu de (5, 5)

+0

Le premier élément de la liste ne contient pas plusieurs tuples/articles. – wwii

+0

@wwii merci de souligner, j'aurais dû mentionner cela, les tuples avec des longueurs variées – proguorammer

Répondre

0
for item in theList: 
    last = item[-1] # could be an int or a tuple 
    if isinstance(last, tuple): 
     print last 
    else: 
     print item 

L'idée clé de ce code est le test isinstance(). Le doco lié est:

isinstance (objet, ClassInfo)

retour vrai si l'argument de l'objet est une instance de l'argument ClassInfo, ou d'un (direct, indirect ou virtuel) sous-classe de celle-ci. Renvoie également true si classinfo est un objet type (classe de style nouveau) et si l'objet est un objet de ce type ou d'une sous-classe (directe, indirecte ou virtuelle) de ce type. Si l'objet n'est pas une instance de classe ou un objet du type donné, la fonction renvoie toujours false. Si classinfo est un tuple d'objets de classe ou de type (ou récursivement, d'autres tels n-uplets), renvoyez true si l'objet est une instance de l'une des classes ou des types. Si classinfo n'est pas une classe, un type ou un tuple de classes, de types et de tuples, une exception TypeError est déclenchée.

0
l = [(5, 5), ((5, 5), (4, 5)), ((5, 5), (4, 2), (3, 3))] 
[ t[-1] if isinstance(t[-1], tuple) else t for t in l ] 

Sortie:

[(5, 5), (4, 5), (3, 3)]