Выражение неявно приведено из 'String?' Любой [дубликат]

Текущие ответы хороши, но не говорите о том, как они представляют собой синтаксический сахар для некоторого шаблона, к которому мы так привыкли.

Давайте начнем с примера, скажем, у нас есть 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, 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

39
задан Randika Vishman 19 May 2019 в 22:24
поделиться