2015-11-21 1 views
0

Je sais que je peux faire un essai/except ou if/else et définir un défaut basé sur la clause error ou else, mais je me demandais s'il y avait un seul doublure qui pourrait le faire comme getattr.getattr pour un index de liste en Python?

+0

une question connexe: http://stackoverflow.com/questions/5125619/why-list-doesnt-have-safe-get-method-like-dictionary – newtover

Répondre

5

La bonne: juste def une fonction d'aide

def my_getitem(container, i, default=None): 
    try: 
     return container[i] 
    except IndexError: 
     return default 

La mauvaise: vous pouvez uniligne la version conditionnelle

item = container[i] if i < len(container) else default 

Le laid: ce sont des hacks, ne pas utiliser.

item = (container[i:] + [default])[0] 

item, = container[i:i+1] or [default] 

item = container[i] if container[i:] else default 

item = dict(enumerate(container)).get(i, default) 

item = next(iter(container[i:i+1]), default) 
+0

le mauvais ne fonctionne pas pour les indices négatifs – newtover

+0

qui est pourquoi c'est mauvais :) – wim

+0

En fait, j'aime un peu le troisième hack, aussi longtemps que vous pouvez supposer que «je» est non négatif. – chepner