Python for-in loop preceded by a variable [duplicate]
Циклу Python for -in предшествует переменная [дубликат]
Я видел такой код, как:
foo = [x for x in bar if x.occupants > 1]
Что это значит и как это работает?
Переведено автоматически
Ответ 1
Текущие ответы хороши, но не говорят о том, что они являются просто синтаксическим сахаром для некоторого шаблона, к которому мы так привыкли.
Давайте начнем с примера, допустим, у нас есть 10 чисел, и нам нужно подмножество тех, которые больше, скажем, 5.
>>> numbers = [12, 34, 1, 4, 4, 67, 37, 9, 0, 81]
Для вышеупомянутой задачи приведенные ниже подходы полностью идентичны друг другу и варьируются от наиболее подробных до кратких, удобочитаемых и питоновских:
Подход 1
result = [] for index inrange(len(numbers)): if numbers[index] > 5: result.append(numbers[index]) print result #Prints [12, 34, 67, 37, 9, 81]
Подход 2 (немного более чистый, циклы for-in)
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
Перевод с английского: B - это множество, члены которого выбираются из A, поэтому B является подмножеством A (B ⊂ A), где выполняется характеристика (ы), указанная функцией S: S(x) == True
Определение B с использованием понимания списка:
B = [x для x в A, если S(x)]
Итак, для построения B с пониманием списка, элементы B (обозначаемые x) выбираются из набора A, где S(x) == True (условие включения).
Примечание: Функция, S которая возвращает логическое значение, называется предикатом.
Ответ 4
Это возвращает список, содержащий все элементы в bar, которые занимают > 1.