在Python中分割并将单词首字母变为大写

-2 投票
2 回答
2247 浏览
提问于 2025-04-29 19:10

我有一个列表:

s = ['SMITH', 'JONES', 'Paul']

我需要每个元素的第一个字母大写,而且所有元素之间用下划线连接:

s = ['Smith_Jones_Paul']

我有很多这样的元素,想要写一个循环来一次性处理它们。你能帮我吗?

暂无标签

2 个回答

0

其实,手动操作(稍微)快一点:

>>> "_".join([x[0].upper() + x[1:] for x in s])
'Smith_Jones_Paul'

我对这个基准测试有点困惑:

>>> %timeit '_'.join([x.capitalize() for x in s])
1000000 loops, best of 3: 817 ns per loop

>>> %timeit '_'.join([x[0].upper() + x[1:] for x in s])
1000000 loops, best of 3: 796 ns per loop

在这种情况下,结果的变化真的很大。不过当我用一个简单的循环来做这个测试时:

z = ["aasdfasdfasdfsadfa", "aasdfasdfasdfsadfa", "aasdfasdfasdfsadfa", 
     "aasdfasdfasdfsadfa", "aasdfasdfasdfsadfb"] * 10

for i in range(1000000): 
    a = [x[0] + x[1:] for x in z]

for i in range(1000000):
    b = [x.capitalize() for x in z]

时间差是9秒对16秒!

4

使用capitalize这个字符串方法,对列表中的每个单词进行处理,然后用join把这些字符串用下划线连接起来:

>>> '_'.join(x.capitalize() for x in s)
'Smith_Jones_Paul'

总结一下...

  • capitalize会把字符串的第一个字母变成大写,后面的字母变成小写。
  • (x.capitalize() for x in s)这个表达式会对你列表中的每个字符串应用capitalize方法。
  • join会把一个字符串列表(或者其他可迭代对象)中的字符串用一个分隔符连接起来(在这里是下划线)。

注意:把一个列表传给join比上面提到的生成器表达式更高效。

>>> %timeit '_'.join([x.capitalize() for x in s]) # list
1000000 loops, best of 3: 866 ns per loop

>>> %timeit '_'.join(x.capitalize() for x in s) # generator
100000 loops, best of 3: 2.05 us per loop

撰写回答