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


当前回答

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

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

其他回答

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

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

列表理解是我的做法,这是“python”的方式。下面的文字记录展示了如何将一个列表全部转换为大写,然后再转换回小写:

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

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

fruits=['orange', 'grape', 'kiwi', 'apple', 'mango', 'fig', 'lemon']
newList = []
for fruit in fruits:
    newList.append(fruit.upper())
print(newList)
>>> list(map(str.lower,["A","B","C"]))
['a', 'b', 'c']