>>> mylis = ['this is test', 'another test'] >>> [item.upper() for item in mylis] ['THIS IS TEST', 'ANOTHER TEST']
Ответ 2
Использование встроенной стандартной библиотеки map:
>>> mylis = ['this is test', 'another test'] >>> list(map(str.upper, mylis)) ['THIS IS TEST', 'ANOTHER TEST']
В Python 2.x map создал желаемый новый список, применив заданную функцию к каждому элементу в списке.
В Python 3.x map создает итератор вместо списка, поэтому необходим вызов list. Если вы используете Python 3.x и вам требуется список, то вам лучше подойдет подход понимания списка.
Ответ 3
Иногда вам нужно применить функцию к элементам списка на месте. Следующий код сработал для меня:
Пожалуйста, обратите внимание, выходные данные map() передаются в конструктор list, чтобы убедиться, что список преобразован в Python 3. Возвращаемый список, заполненный значениями None, следует игнорировать, поскольку нашей целью было преобразовать list a на месте
Ответ 4
Строковые методы в Python оптимизированы, поэтому вы обнаружите, что реализации циклов, упомянутые в других ответах здесь (1, 2), будут быстрее, чем векторизованные методы в других библиотеках, таких как pandas и numpy, которые выполняют ту же задачу.
В общем, вы можете применить функцию к каждому элементу списка, используя понимание списка или map() как указано в других ответах здесь. Например, учитывая произвольную функцию func, вы можете либо сделать:
new_list = [func(x) for x in mylis] # or new_list = list(map(func, mylis))
Если вы хотите изменить список на месте, вы можете заменить каждый элемент назначением фрагмента.
# note that you don't need to cast `map` to a list for this assignment # this is probably the fastest way to apply a function to a list mylis[:] = map(str.upper, mylis) # or mylis[:] = [x.upper() for x in mylis]
или с помощью явного цикла:
for i inrange(len(mylis)): mylis[i] = mylis[i].upper()
Вы также можете проверить встроенные библиотеки itertools и operator, чтобы найти встроенные методы для построения функции, применяемой к каждому элементу. Например, если вы хотите умножить каждый элемент в списке на 2, вы можете использовать itertools.repeat и operator.mul:
from itertools import repeat, starmap from operator import mul
newlis1 = list(map(mul, mylis, repeat(2))) # or with starmap newlis2 = list(starmap(mul, zip(mylis, repeat(2))))
# but at this point, list comprehension is simpler imo newlis3 = [x*2for x in mylis]