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

时间:2009-11-26 05:15:53

标签: python list

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

13 个答案:

答案 0 :(得分:349)

可以使用列表推导来完成。这些基本上采用[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']

答案 1 :(得分:45)

除了更容易阅读(对很多人来说),列表推导也赢得了速度竞赛:

$ 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

答案 2 :(得分:31)

>>> map(str.lower,["A","B","C"])
['a', 'b', 'c']

答案 3 :(得分:19)

列表理解是我如何做到的,它是“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']

答案 4 :(得分: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

答案 5 :(得分:4)

一名学生问,另一名有相同问题的学生回答:))

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

答案 6 :(得分:2)

mylist = ['Mixed Case One', 'Mixed Case Two', 'Mixed Three']
print map(lambda x: x.lower(), mylist)
print map(lambda x: x.upper(), mylist)

答案 7 :(得分:1)

解决方案:

>>> 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

答案 8 :(得分:1)

如果您的目的是通过一次转换来与另一个字符串匹配,则也可以使用str.casefold()

当您使用非ascii字符并与ascii版本匹配时(例如maßevs masse),这很有用。尽管在这种情况下str.lowerstr.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

答案 9 :(得分:1)

您可以尝试使用:

my_list = ['india', 'america', 'china', 'korea']

def capitalize_list(item):
    return item.upper()

print(list(map(capitalize_list, my_list)))

答案 10 :(得分:0)

Python3.6.8

In [1]: a = 'which option is the fastest'                                                                                                                                           

In [2]: %%timeit 
   ...: ''.join(a).upper() 
762 ns ± 11.4 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

In [3]: %%timeit  
   ...: map(lambda x:x.upper(), a) 
209 ns ± 5.73 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

In [4]: %%timeit  
   ...: map(str.upper, [i for i in a]) 
1.18 µs ± 11.3 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

In [5]: %%timeit 
   ...: [i.upper() for i in a] 
3.2 µs ± 64.1 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

如果您需要字符串或列表作为输出而不是迭代器(这是针对Python3的),请将''.join(string).upper()选项与此进行比较:

In [10]: %%timeit  
    ...: [i for i in map(lambda x:x.upper(), a)] 
4.32 µs ± 112 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

答案 11 :(得分:0)

如果您尝试将列表中的所有字符串都转换为小写,则可以使用pandas:

import pandas as pd

data = ['Study', 'Insights']

pd_d = list(pd.Series(data).str.lower())

输出:

['study', 'insights']

答案 12 :(得分:0)

@Amorpheuses给here提供了一个最简单的答案。

带有val中的值列表:

valsLower = [item.lower() for item in vals]

使用f = open()文本源,这对我来说效果很好。