J'essaie de trouver une belle façon de résumer une liste et une liste de listes dans la même fonction, jusqu'à présent, j'ai:Pythonic manière des listes et des listes de sommer les listes
import operator
"""
Fails late for item = ['a', 'b']
"""
def validate(item):
try:
return sum(item) == sum(range(1, 10))
except TypeError:
return sum(reduce(operator.add, item)) == sum(range(1, 10))
"""
Not valid for item = [1,2,[3,4,5]]
"""
def validate2(item):
if isinstance(item[0], int):
return sum(item) == sum(range(1, 10))
else:
return sum(reduce(operator.add, item)) == sum(range(1, 10))
print validate([1, 2, 3, 4, 5, 6, 7, 8, 9])
print validate([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print validate2([1, 2, 3, 4, 5, 6, 7, 8, 9])
print validate2([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
. ..mais aucun de ceux-ci me semble tout à fait raison (raisons dans les cordes doc). Ce que je veux savoir, c'est s'il y a une meilleure façon de faire la somme des listes et des listes de listes qui ne nécessite pas d'attraper des exceptions ou d'analyser réellement la liste avant que la fonction ne décide quoi faire.
Évidemment, je m'attends toujours à ce que ['a', 'b']
soit invalide.
Je n'avais pas vu le module doctest avant, merci de me l'avoir présenté +1 – MattyW