2010-12-04 42 views
1

Assez simple mais je ne trouve pas un exemple décent; donc j'ai demandé ici!Python() avec des cas

En fait ce que je WAS, = carte de résultats (si> 0: faites cela, le reste: ce faire, listOfNumbers)

Comment puis-je faire cela?

Répondre

7

Utilisez une fonction lambda (docs). J'ai utilisé les fonctions d'espace réservé foo() et bar() que vous devrez remplacer par vos bits "faire ceci". Une alternative, qui, comme dit légitimement @hop est la méthode préférée en Python, est d'utiliser une compréhension de liste. Cela n'a même pas besoin de l'utilisation d'une fonction lambda.

resultList = [foo(x) if x > 0 else bar(x) for x in listOfNumbers) 
+1

une compréhension de liste ou une expression de générateur est préférable de nos jours – hop

+0

@hop Vous avez raison, édité dedans, merci. – marcog

+0

selon les directives je prends l'habitude d'attendre 2 jours pour accepter des réponses, et par votre talent vous n'étiez pas dans le besoin désespéré de points immédiats! : D Cheers – Bolster

3
resultList = [foo(x) if x > 0 else bar(x) for x in listOfNumbers] 
4

La réponse est simple: NE PAS CE.

Vraiment. Soyez amical avec ceux qui doivent lire le code après vous. Ecrivez-le en quelques lignes, comme ça:

def choose_value(x): 
    if x > 0: 
    return blah(x) 
    return minor(x) 

results = map(choose_value, list_of_numbers) 

Ceci est beaucoup plus lisible et réutilisable à mon goût.

+3

Aigh. La compréhension de la liste me semble assez explicite. – evadeflow