>>> 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 .
42
它可以通过列表推导来完成 . 这些基本上采用 [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']
fruits=['orange', 'grape', 'kiwi', 'apple', 'mango', 'fig', 'lemon']
newList = []
for fruit in fruits:
newList.append(fruit.upper())
print(newlist)
15
除了更容易阅读(对于许多人),列表理解也赢得了速度竞赛:
$ 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
6
>>> map(str.lower,["A","B","C"])
['a', 'b', 'c']
2
对于这个样本,理解是最快的
$ 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
0
mylist = ['Mixed Case One', 'Mixed Case Two', 'Mixed Three']
print map(lambda x: x.lower(), mylist)
print map(lambda x: x.upper(), mylist)
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']
9 回答
解:
此解决方案将创建一个包含小写项目的单独列表,无论其原始情况如何 . 如果原始案例是高位,则
list s
将包含list p
中相应项目的小写 . 如果list p
中列表项的原始大小写已经是小写,则list s
将保留项的大小写并保持小写 . 现在您可以使用list s
而不是list p
.它可以通过列表推导来完成 . 这些基本上采用
[function-of-item for item in some-list]
的形式 . 例如,要创建一个新列表,其中所有项目都是较低的(或在第二个代码段中为大写),您将使用:您还可以使用
map
函数:一个学生问,另一个同样有问题的学生回答:))
除了更容易阅读(对于许多人),列表理解也赢得了速度竞赛:
对于这个样本,理解是最快的
列表理解是我如何做到的,它是“Pythonic”的方式 . 以下脚本显示了如何将列表转换为全部大写然后再转换为低级:
如果你的目的是通过一次转换来匹配另一个字符串,你也可以使用
str.casefold()
.当你有非ascii字符并与ascii版本匹配时(例如:maßevsmasse),这很有用 . 虽然
str.lower
或str.upper
在这种情况下失败,str.casefold()
将通过 . 这在Python 3中可用,并且使用答案https://stackoverflow.com/a/31599276/4848659详细讨论了这个想法 .