为大写我有一个列表:分割和改变一个词的第一个字符在Python
s = ['SMITH', 'JONES', 'Paul']
我只需要每个元素的拳头字母是大写字母,所有元素都用下划线进行连接:
s = ['Smith_Jones_Paul']
我有一些这些,并希望做一个循环来改变他们所有人。你可以帮我吗?
为大写我有一个列表:分割和改变一个词的第一个字符在Python
s = ['SMITH', 'JONES', 'Paul']
我只需要每个元素的拳头字母是大写字母,所有元素都用下划线进行连接:
s = ['Smith_Jones_Paul']
我有一些这些,并希望做一个循环来改变他们所有人。你可以帮我吗?
使用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
其实,做“手册”的工作是(一点点)快:
>>> "_".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秒的差异!
+1,但使用列表更有效率加入 – 2014-10-26 20:20:32
@PadraicCunningham谢谢你,我会将这一点加入到答案中。 – 2014-10-26 20:22:03
不幸的是,如果我打印我得到'史密斯琼斯保罗' – blackforest 2014-10-26 20:38:54