Резюме: Этот блог объясняет способы применить данную функцию для каждого элемента Список Отказ Лучший способ применить функцию для каждого элемента списка – использовать Python Встроенный карта ()
Функция, которая принимает функцию и один или несколько ейтена в качестве аргументов. Затем он применяет функцию к каждому элементу ейтериалов. Альтернативный способ – использовать Понимание списка Отказ
Примечание : Все приведенные ниже решения были проверены с использованием Python 3.9.0b5.
Постановка проблемы
Представьте себе следующий список строк в Python.
my_list = ['you', 'cannot', 'exercise', 'away', 'a', 'bad', 'diet']
Как можно применять функцию в верхнюю часть каждой строки в списке?
['YOU', 'CANNOT', 'EXERCISE', 'AWAY', 'A', 'BAD', 'DIET']
Задний план
Вышеуказанная проблема, как и многие другие, имеет довольно простое решение в Python. Можно было написать обычную ванильную C-похожую петлю, чтобы решить это. Тем не менее, почти каждый кодер Python будет скучно с C-похожими петлями, в одной точке или другой. Они часто пытаются найти проще, быстрее и элегантные решения. К счастью, Python в качестве языка сценариев всегда развивается, чтобы порадовать его вентиляторы. Сообщество Python стремится предложить элегантные и креативные способы решения проблем. Целью этих учебных пособий в блоге является предоставление пользователю идей для решения более крупных проблем.
Давайте начнем, я хочу учиться !!
Используя Python встроенный карта ()
Функция является наиболее эффективным и элегантным способом решить проблему. карта ()
принимает функцию и одну или несколько ейтов в качестве аргументов. карта ()
Применяет заданную функцию для каждого элемента счетчивых аргументов. Следующий код показывает различные варианты решения.
>>> ## 'my_list' is the original list whose string elements need to be >>> ## fully uppercased. Note that 'my_list' is an object of the Python >>> ## built-in List class. Lists, Sets, Dicts and Tuples are considered >>> ## iterables. >>> my_list = ['you', 'cannot', 'exercise', 'away', 'a', 'bad', 'diet'] >>> >>> ## Use the upper() function of Python's built-in str class, to modify >>> ## each element of the my_list iterable. >>> my_generic_iterable = map(str.upper, my_list) >>> >>> ## map() returns a pure iterable object. It is also known as a generator object. >>> ## It contains all the modified elements. Generators are temporary container >>> ## objects. They can be iterated upon only once, to extract the elements >>> ## within them. For example, use the 'list()' constructor to go thru each >>> ## element of the 'my_generic_iterable' generator and generate a list. >>> list(my_generic_iterable) ['YOU', 'CANNOT', 'EXERCISE', 'AWAY', 'A', 'BAD', 'DIET'] >>> >>> ## Alternatively one can iterate thru each element in my_generic_iterable >>> ## and print it. But one has to create it again... >>> ## Go ahead and try commenting the line below (i.e. map()...) to see what >>> ## gets printed with/without executing it. >>> my_generic_iterable = map(str.upper, my_list) >>> for i in my_generic_iterable: ... print(i) ... YOU CANNOT EXERCISE AWAY A BAD DIET >>>
Не так быстро!! Что вы имели в виду под одним или несколькими реюрмированными аргументами на карту ()?
HA !! Вы заметили это !!! карта ()
Функция может иметь более одного, как аргументы. Что это значит? Рассмотрим следующий код.
>>> ## Lets consider the following two list of strings. They need to be sewn >>> ## together and uppercased as in the previous example. >>> my_list1 = ['you', 'exercise', 'a', 'diet', 'eat', 'hearty', 'once', 'day'] >>> my_list2 = ['cannot','away','bad', '!! ', 'a', 'salad', 'a', '.'] >>> >>> ## A function func1() is defined to join the two string elements and uppercase the resulting >>> ## string. >>> def func1 (item1, item2): ... return str.upper(item1 + ' ' + item2) ... >>> ## This time the map() function is given the function (i.e. func1()) and two lists as >>> ## arguments. As before, a generic Iterator is returned. >>> iter = map(func1, my_list1, my_list2) >>> >>> ## Extract the elements from the iterator. Voila!! The string elements are sewn together >>> ## and uppercased. >>> list(iter) ['YOU CANNOT', 'EXERCISE AWAY', 'A BAD', 'DIET !! ', 'EAT A', 'HEARTY SALAD', 'ONCE A', 'DAY .'] >>> ## Here is a bonus one-liner to figure out. Hint: This is the same as the above two lines >>> ## combined together into one line. >>> list(map(func1, my_list1, my_list2)) ['YOU CANNOT', 'EXERCISE AWAY', 'A BAD', 'DIET !! ', 'EAT A', 'HEARTY SALAD', 'ONCE A', 'DAY .'] >>>
Все почти так же, как в предыдущем примере. Заметные различия
- Функция является формальным определением (то есть func1 ()
) вместо встроенного (E.g.
str.upper)
карта () На этот раз получает два повторных аргумента (то есть
my_list1,
my_list2)
карта ()
до сих пор возвращает итератор. Функция – это функция, будь то встроенная или явное определение. И да, можно предоставить даже три или четырех или более и более ущербах аргументам карта ()
Функция, если это необходимо.
Ок, отлично!! Вы также упомянули порядок списка
Хорошо, ты заметил это !! Да, можно использовать Понимание списка Чтобы применить функцию в каждый элемент списка. Как карта ()
Понимание списка также легко увидеть и понять. Хотя, Карта () Функция Выполняется быстрее, чем понимание списка. Рассмотрим следующий код.
>>> ## 'my_list' is the original list, whose string elements need to be >>> ## fully uppercased. Note that 'my_list' is an object of the Python >>> ## built-in List class. Lists, Sets, Dicts and Tuples are considered >>> ## iterables. >>> my_list = ['you', 'cannot', 'exercise', 'away', 'a', 'bad', 'diet'] >>> >>> ## Unlike map(), this list comprehension returns a List. >>> my_list1 = [str.upper(i) for i in my_list] >>> >>> ## Print the resulting list. As you can see the result is the same as map() >>> print(my_list1) ['YOU', 'CANNOT', 'EXERCISE', 'AWAY', 'A', 'BAD', 'DIET'] >>> >>> ## Here is a one-liner to ponder. It does the exact same operation as >>> ## above. Don't worry if you do not understand it immediately!! Take a >>> ## deep breath, stare at it, take it apart operation by operation... >>> ## You will eventually get the hang of it with enough practice. >>> [str.upper(i) for i in ['eating', 'a', 'hearty', 'vegetable', 'stew', 'heals', 'the', 'body', 'and', 'the', 'soul']] ['EATING', 'A', 'HEARTY', 'VEGETABLE', 'STEW', 'HEALS', 'THE', 'BODY', 'AND', 'THE', 'SOUL'] >>>
Видно, что понимание списка так же простой в использовании в качестве карта ()
функция.
Хм!! Какой я должен использовать?
Отличный вопрос !! Рассмотрим следующее сравнение. Обратите внимание на C-типа «для» цикла для дополнительного развлечения.
$ ## Lets start with the C-like for loop. $ python -m timeit \ > "my_list = []" \ > "for i in ['you', 'cannot', 'exercise', 'away', 'a', 'bad', 'diet']: \ > my_list.append(i.upper())" 200000 loops, best of 5: 1.13 usec per loop $ ## Next up is list comprehension. $ python -m timeit \ > "[i.upper() for i in ['you', 'cannot', 'exercise', 'away', 'a', 'bad', 'diet']]" 500000 loops, best of 5: 992 nsec per loop $ ## Finally, use the map() function. $ python -m timeit \ > "list(map(str.upper, ['you', 'cannot', 'exercise', 'away', 'a', 'bad', 'diet']))" 500000 loops, best of 5: 894 nsec per loop
Как видно, существует только незначительная разница между тремя методами. карта ()
Функция выполняет самые быстрые среди трех. Для небольшого и простого примера, показанного выше, любой из трех методов в порядке использования. Но как списки или функции становятся сложными, карта ()
становится более практичным методом для использования.
Вывод
В качестве языка сценариев Python всегда развивается интересными способами. Сообщество разработчика Python достаточно активно добавлять новые и лучшие функции. Они продолжают улучшать существующие особенности. Обучение – это долговечное обязательство и никогда не должна заканчиваться. Рассмотрим следующий код, который модифицирует исходный список на месте. Да, только когда вы, читатель, думал, что эта статья была закончена !!!
>>> ## 'my_list' is the same original list as before >>> my_list = ['you', 'cannot', 'exercise', 'away', 'a', 'bad', 'diet'] >>> my_list ['you', 'cannot', 'exercise', 'away', 'a', 'bad', 'diet'] >>> >>> ## This is the function to use. It takes a list and an index. >>> ## func1() capitalizes the first letter of each string >>> ## element at the i'th index of the list. The capitalization >>> ## is done by using the title() function from Python's built-in >>> ## str module >>> def func1(alist, i): ... alist[i] = alist[i].title() ... >>> ## This time around, just the first letter of each string element >>> ## needs to be capitalized. The need was to modify the original list >>> ## in-place. The Python built-in any() function simply forces map() >>> ## to iterate thru iterate thru the numeric array created by range(). >>> ## One could have used list(), set(), all() etc. to force such an >>> ## iteration. Try it!! >>> any(map(lambda i:func1(my_list, i), range(len(my_list)))) False >>> >>> ## The proof is in the pudding!!! >>> my_list ['You', 'Cannot', 'Exercise', 'Away', 'A', 'Bad', 'Diet'] >>>
Финктерская академия
Этот блог был доставлен вам Гириша Рао , студент Финктерская академия Отказ Вы можете найти его Профиль намного здесь Отказ
Справка
Все исследования для этой статьи в блоге было сделано с использованием Python Documents , Поисковая система Google и общая база знаний Финктерская академия и Переполнение стека Общины.