爲大寫我有一個列表:分割和改變一個詞的第一個字符在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