Текущие ответы хороши, но не говорите о том, как они представляют собой синтаксический сахар для некоторого шаблона, к которому мы так привыкли.
Давайте начнем с примера, скажем, у нас есть 10 чисел, и мы хотим подмножество тех, которые больше, чем, скажем, 5.
>>> numbers = [12, 34, 1, 4, 4, 67, 37, 9, 0, 81]
. Для вышеупомянутой задачи нижеприведенные подходы полностью идентичны друг другу и идут от большинства дословных до кратких, читаемых и pythonic :
result = []
for index in range(len(numbers)):
if numbers[index] > 5:
result.append(numbers[index])
print result #Prints [12, 34, 67, 37, 9, 81]
result = []
for number in numbers:
if number > 5:
result.append(number)
print result #Prints [12, 34, 67, 37, 9, 81]
result = [number for number in numbers if number > 5]
[function(number) for number in numbers if condition(number)]
где:
function(x)
принимает x
и преобразует его во что-то полезное (например, x*x
) condition(x)
возвращает любое значение False-y (False, None, empty string, empty list , и т. д.), то текущая итерация будет пропущена (подумайте continue
). Если функция возвращает значение, отличное от False-y, то текущее значение переходит к окончательному результирующему массиву (и проходит этап преобразования выше). Чтобы понять синтаксис в слегка по-разному посмотрите в разделе «Бонус» ниже.
Для получения дополнительной информации следуйте руководству, которое все другие ответы связали: List Consrehension
(Немного непитонический, но поставив его здесь для полноты)
Пример выше может быть записан как:
result = filter(lambda x: x > 5, numbers)
Общее выражение выше, может быть записано как:
result = map(function, filter(condition, numbers)) #result is a list in Py2