【问题标题】:Split and change first character of a word to uppercase in Python在Python中将单词的第一个字符拆分并更改为大写
【发布时间】:2014-10-26 20:09:33
【问题描述】:

我有一个清单:

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

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

s = ['Smith_Jones_Paul']

我有很多这样的,并想创建一个循环来更改所有这些。你能帮帮我吗?

【问题讨论】:

    标签: python string loops uppercase


    【解决方案1】:

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

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

    总结...

    • capitalize 将字符串的第一个字符转为大写,后面的字符转为小写。
    • (x.capitalize() for x in s)capitalize 应用于列表s 中的每个字符串。
    • 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
    

    【讨论】:

    • @PadraicCunningham 谢谢,我会在答案中添加这一点。
    • 不幸的是,如果我打印,我会得到“smith jones paul”
    • @blackforest 那么你做错了什么,这个答案有效。
    • 你是对的,刚刚检查并在我的循环之外工作。谢谢
    【解决方案2】:

    实际上,做“手动”工作(只是稍微)快一点:

    >>> "_".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 秒!

    【讨论】:

      猜你喜欢
      • 2023-03-09
      • 2013-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-04
      • 2023-03-13
      相关资源
      最近更新 更多