在Python中拆分并将单词的第一个字符更改为大写

时间:2014-10-26 20:09:33

标签: python string loops uppercase

我有一个清单:

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

我只需要每个元素的第一个字母为大写,并且所有元素都用下划线连接:

s = ['Smith_Jones_Paul']

我有很多这样的东西,并希望制作一个循环来改变所有这些。你能帮我吗?

2 个答案:

答案 0 :(得分:3)

对列表中的每个单词使用capitalize字符串方法,然后将join字符串与下划线一起使用:

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

总结......

  • capitalize将字符串的第一个字符设置为大写,将后续字符设置为小写。
  • (x.capitalize() for x in s)capitalize应用于列表s中的每个字符串。
  • join获取一个列表(或其他可迭代的)字符串,并使用分隔符(在本例中为下划线)将字符串连接在一起。

N.B。值得注意的是,将列表传递给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

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

在这种情况下,变化非常大。但是当我为这种情况做一个简单的for循环时:

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秒的差异!