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


当前回答

对于这个例子,理解是最快的

$ 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

其他回答

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

你可以尝试使用:

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

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

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

这里有另一个解决方案,但我不建议使用它。因为之前没有添加这个解决方案,所以把它放在这里完成这个主题。

import timeit

def foo1():
    L = ["A", "B", "C", "&"]
    return [x.lower() for x in L]
def foo2():
    L = ["A", "B", "C", "&"]
    return "%".join(L).lower().split("%")

for i in range(10):
    print("foo1", timeit.timeit(foo1, number=100000))
    print("foo2", timeit.timeit(foo2, number=100000), end="\n\n")
foo1 0.0814619
foo2 0.058695300000000006

foo1 0.08401910000000004
foo2 0.06001100000000004

foo1 0.08252670000000001
foo2 0.0601641

foo1 0.08721100000000004
foo2 0.06254229999999994

foo1 0.08776279999999992
foo2 0.05946070000000003

foo1 0.08383590000000007
foo2 0.05982449999999995

foo1 0.08354679999999992
foo2 0.05930219999999997

foo1 0.08526650000000013
foo2 0.060690699999999875

foo1 0.09940110000000013
foo2 0.08484609999999981

foo1 0.09921800000000003
foo2 0.06182889999999985

除了更容易阅读(对许多人来说),列表推导式也在速度竞赛中获胜:

$ 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

这可以通过列表推导来完成

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

或者使用映射函数

>>> list(map(lambda x: x.lower(), ["A", "B", "C"]))
['a', 'b', 'c']
>>> list(map(lambda x: x.upper(), ["a", "b", "c"]))
['A', 'B', 'C']