【发布时间】:2023-04-01 23:35:01
【问题描述】:
我有一个包含字符串的 Python 列表变量。是否有一个函数可以一次将所有字符串转换为小写,反之亦然,大写?
【问题讨论】:
-
为什么是“一次性”?您是否考虑过多次通过的可能性?
我有一个包含字符串的 Python 列表变量。是否有一个函数可以一次将所有字符串转换为小写,反之亦然,大写?
【问题讨论】:
可以用list comprehensions完成
>>> [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']
【讨论】:
map(str.lower, ["A","B","C"])
>>> list(map(str.lower,["A","B","C"]))
['a', 'b', 'c']
【讨论】:
str.upper 转换为大写
list(map(str.lower,["A","B","C"]))。
除了更易于阅读(对于许多人而言)之外,列表推导式还赢得了速度竞赛:
$ 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
【讨论】:
map 赢得了比赛,但什么也没做 :)
map(str.lower,["A","B","C"]) 最快的是python3.7.5
map 除了创建一个对象,当您对其进行迭代 时,它不会执行任何操作.lower()。如果您尝试list(map()),它会更慢。正如让-弗朗索瓦所说。
@Amorpheuses 给出了一个更简单的最佳答案版本here。
在 val 中有一个值列表:
valsLower = [item.lower() for item in vals]
这对我来说很适合 f = open() 文本源。
【讨论】:
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)))
【讨论】:
列表理解是我的做法,它是“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']
【讨论】:
list 作为变量名不是最好的选择:)
list 的东西:))。你认为你最近得到的紫外线来自哪里? :)
如果您的目的是通过一次转换来匹配另一个字符串,您也可以使用str.casefold()。
当您有非 ascii 字符并与 ascii 版本匹配(例如:maße vs masse)时,这很有用。尽管str.lower 或str.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
【讨论】:
您可以尝试使用:
my_list = ['india', 'america', 'china', 'korea']
def capitalize_list(item):
return item.upper()
print(list(map(capitalize_list, my_list)))
【讨论】:
对于这个示例,理解是最快的
$ python -m timeit -s 's=["one","two","three"]*1000' '[x.upper for x in s]' 1000 个循环,最好的 3 个:每个循环 809 微秒 $ python -m timeit -s 's=["one","two","three"]*1000' 'map(str.upper,s)' 1000 次循环,3 次中的最佳:每个循环 1.12 毫秒 $ python -m timeit -s 's=["one","two","three"]*1000' 'map(lambda x:x.upper(),s)' 1000 次循环,3 次中的最佳:每循环 1.77 毫秒【讨论】:
一个学生提问,另一个学生回答同样的问题:))
fruits=['orange', 'grape', 'kiwi', 'apple', 'mango', 'fig', 'lemon']
newList = []
for fruit in fruits:
newList.append(fruit.upper())
print(newList)
【讨论】:
解决方案:
>>> 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。
【讨论】:
如果您尝试将列表中的所有字符串转换为小写,您可以使用 pandas :
import pandas as pd
data = ['Study', 'Insights']
pd_d = list(pd.Series(data).str.lower())
输出:
['study', 'insights']
【讨论】: