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