将包含字符串的Python列表转换为小写或大写

use*_*126 226 python list

我有一个包含字符串的python列表变量.是否有一个python函数可以将一个传递中的所有字符串转换为小写,反之亦然,大写?

YOU*_*YOU 388

它可以通过列表推导来完成.这些基本上采取的形式[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']
Run Code Online (Sandbox Code Playgroud)

你也可以使用这个map功能:

>>> map(lambda x:x.lower(),["A","B","C"])
['a', 'b', 'c']
>>> map(lambda x:x.upper(),["a","b","c"])
['A', 'B', 'C']
Run Code Online (Sandbox Code Playgroud)

  • **地图**的第二个命题是正确但浪费.制作lambda函数**没有意义**.只需使用`map(str.lower,["A","B","C"])` (32认同)
  • map函数在python2中按预期工作,但是在python3中你要将地图包装在列表ex:`list(map(lambda x:x.upper(),["a","b","c"])中)` (8认同)
  • @ThePhi 我用我拥有的一个小样本进行了快速检查。对我的 20 个列表进行循环,每个列表大约有 500 个项目。最快的是前者(平均 0.0011 秒)与使用地图(平均 0.0022 秒)。 (4认同)
  • @mimic 有点晚了,但是对于遇到此问题的人,我猜您的问题可能是您没有将列表理解的结果分配回您的列表。只是对列表推导式执行返回值,但不会将其重新分配给列表变量。 (2认同)

Ned*_*ily 49

除了更容易阅读(对于许多人),列表理解也赢得了速度竞赛:

$ 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
Run Code Online (Sandbox Code Playgroud)

  • 它并不总是更快.这是一个不是这样的例子:http://stackoverflow.com/questions/1247486/python-list-comprehension-vs-map但在这种情况下,它不会慢很多*.使用lambda显然会产生很大的不同.有更多的例子说明为什么在性能问题上相信你的直觉是危险的,特别是在Python中. (6认同)
  • 你知道为什么列表理解比地图更快的原因吗? (4认同)
  • 在python 3中,`map`赢得比赛,但什么也没做:) (2认同)
  • @NedDeily `map(str.lower,["A","B","C"])` 最快是 python3.7.5 (2认同)

gho*_*g74 33

>>> map(str.lower,["A","B","C"])
['a', 'b', 'c']
Run Code Online (Sandbox Code Playgroud)

  • 在python 2中的unicode字符串上工作得不好 (5认同)
  • 在Python 3中,您需要将结果映射传递给列表函数以获得所需的结果,即`list(map(str.lower,["A","B","C"]))`。 (3认同)
  • 显然 `str.upper` 转换为大写 (2认同)

pax*_*blo 20

列表理解是我如何做到的,它是"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']
Run Code Online (Sandbox Code Playgroud)

  • 错误,使用`list`作为变量名称不是最好的选择:) (2认同)

Chi*_*ael 6

mylist = ['Mixed Case One', 'Mixed Case Two', 'Mixed Three']
print(list(map(lambda x: x.lower(), mylist)))
print(list(map(lambda x: x.upper(), mylist)))
Run Code Online (Sandbox Code Playgroud)


Joh*_*ooy 6

对于这个样本,理解是最快的

$ 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


Who*_*oNo 6

@Amorpheuses在这里给出了最简单答案的版本。

使用 val 中的值列表:

valsLower = [item.lower() for item in vals]
Run Code Online (Sandbox Code Playgroud)

这对于我使用 f = open() 文本源非常有效。


小智 5

一个学生问,另一个有同样问题的学生回答:))

fruits=['orange', 'grape', 'kiwi', 'apple', 'mango', 'fig', 'lemon']
newList = []
for fruit in fruits:
    newList.append(fruit.upper())
print(newList)
Run Code Online (Sandbox Code Playgroud)