Карта Python () с кейсами - PullRequest
       10

Карта Python () с кейсами

1 голос
/ 04 декабря 2010

Достаточно просто, но я не могу найти достойного примера; вот я и спросил здесь

По сути, я был следующим: resultList = map (если> 0: сделать это, иначе: сделать это, listOfNumbers)

Как мне это сделать?

Ответы [ 3 ]

7 голосов
/ 04 декабря 2010

Используйте функцию lambda ( документы ). Я использовал функции-заполнители foo() и bar(), которые вам придется заменить на биты "do this" / "do that".

resultList = map(lambda x: foo(x) if x > 0 else bar(x), listOfNumbers)

Альтернатива, которая, как справедливо говорит @hop, является предпочтительным методом в Python, заключается в использовании списочного понимания. Это даже не требует использования функции lambda.

resultList = [foo(x) if x > 0 else bar(x) for x in listOfNumbers)
4 голосов
/ 04 декабря 2010

Ответ прост: НЕ ЭТО.

Действительно.Будьте дружелюбны с тем парнем, который должен читать код после вас.Напишите это в несколько строк, например:

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

results = map(choose_value, list_of_numbers)

Это гораздо более читабельно и многоразово на мой вкус.

3 голосов
/ 04 декабря 2010
resultList = [foo(x) if x > 0 else bar(x) for x in listOfNumbers]
...