Преобразовать список Python со строками все в нижний или верхний регистр - PullRequest
207 голосов
/ 26 ноября 2009

У меня есть переменная списка Python, которая содержит строки. Существует ли функция python, которая может преобразовать все строки за один проход в нижний регистр и наоборот - в верхний регистр?

Ответы [ 9 ]

357 голосов
/ 26 ноября 2009

Это можно сделать с помощью списочных представлений. Они в основном принимают форму [function-of-item for item in some-list]. Например, чтобы создать новый список, в котором все элементы имеют нижний регистр (или верхний регистр во втором фрагменте), вы должны использовать:

>>> [x.lower() for x in ["A","B","C"]]
['a', 'b', 'c']

>>> [x.upper() for x in ["a","b","c"]]
['A', 'B', 'C']

Вы также можете использовать функцию map:

>>> map(lambda x:x.lower(),["A","B","C"])
['a', 'b', 'c']
>>> map(lambda x:x.upper(),["a","b","c"])
['A', 'B', 'C']
47 голосов
/ 26 ноября 2009

Помимо простоты чтения (для многих людей), списочные постижения также выигрывают в скоростной гонке:

$ python2.6 -m timeit '[x.lower() for x in ["A","B","C"]]'
1000000 loops, best of 3: 1.03 usec per loop
$ python2.6 -m timeit '[x.upper() for x in ["a","b","c"]]'
1000000 loops, best of 3: 1.04 usec per loop

$ python2.6 -m timeit 'map(str.lower,["A","B","C"])'
1000000 loops, best of 3: 1.44 usec per loop
$ python2.6 -m timeit 'map(str.upper,["a","b","c"])'
1000000 loops, best of 3: 1.44 usec per loop

$ python2.6 -m timeit 'map(lambda x:x.lower(),["A","B","C"])'
1000000 loops, best of 3: 1.87 usec per loop
$ python2.6 -m timeit 'map(lambda x:x.upper(),["a","b","c"])'
1000000 loops, best of 3: 1.87 usec per loop
31 голосов
/ 26 ноября 2009
>>> map(str.lower,["A","B","C"])
['a', 'b', 'c']
19 голосов
/ 26 ноября 2009

Понимание списков - это то, как я это делаю, это "Pythonic" способ. Следующая расшифровка показывает, как преобразовать список в верхний регистр, а затем обратно в нижний:

pax@paxbox7:~$ python3
Python 3.5.2 (default, Nov 17 2016, 17:05:23) 
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.

>>> x = ["one", "two", "three"] ; x
['one', 'two', 'three']

>>> x = [element.upper() for element in x] ; x
['ONE', 'TWO', 'THREE']

>>> x = [element.lower() for element in x] ; x
['one', 'two', 'three']
6 голосов
/ 26 ноября 2009

Для этого образца понимание наиболее быстрое

$ python -m timeit -s 's=["one","two","three"]*1000' '[x.upper for x in s]'
1000 loops, best of 3: 809 usec per loop

$ python -m timeit -s 's=["one","two","three"]*1000' 'map(str.upper,s)'
1000 loops, best of 3: 1.12 msec per loop

$ python -m timeit -s 's=["one","two","three"]*1000' 'map(lambda x:x.upper(),s)'
1000 loops, best of 3: 1.77 msec per loop
4 голосов
/ 06 ноября 2015

студент спрашивает, другой студент с той же проблемой отвечает:))

fruits=['orange', 'grape', 'kiwi', 'apple', 'mango', 'fig', 'lemon']
newList = []
for fruit in fruits:
    newList.append(fruit.upper())
print(newlist)
2 голосов
/ 26 ноября 2009
mylist = ['Mixed Case One', 'Mixed Case Two', 'Mixed Three']
print map(lambda x: x.lower(), mylist)
print map(lambda x: x.upper(), mylist)
1 голос
/ 16 октября 2018

Если ваша цель - сопоставление с другой строкой путем преобразования за один проход, вы также можете использовать str.casefold().

Это полезно, когда у вас есть символы, отличные от ascii, и совпадающие с версиями ascii (например, maße vs masse). Несмотря на то, что в таких случаях str.lower или str.upper терпит неудачу, str.casefold() пройдет Это доступно в Python 3, и идея подробно обсуждается с ответом https://stackoverflow.com/a/31599276/4848659.

>>>str="Hello World";
>>>print(str.lower());
hello world
>>>print(str.upper());
HELLO WOLRD
>>>print(str.casefold());
hello world
1 голос
/ 31 мая 2018

Решение:

>>> s = []
>>> p = ['This', 'That', 'There', 'is', 'apple']
>>> [s.append(i.lower()) if not i.islower() else s.append(i) for i in p]
>>> s
>>> ['this', 'that', 'there', 'is','apple']

Это решение создаст отдельный список, содержащий строчные элементы, независимо от их исходного регистра. Если исходный регистр имеет верхний регистр, то list s будет содержать нижний регистр соответствующего элемента в list p. Если исходный регистр элемента списка уже прописан в list p, тогда list s сохранит регистр элемента и сохранит его в нижнем регистре. Теперь вы можете использовать list s вместо list p.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...