[英]concatenate every two characters of string
我是Python的新手。 我有一個字符串:
food = "popcorns"
beverage = "water"
如何創建一個新字符串,該字符串將每兩個字符連接在一起,並跳過第三個字符? 像這樣:
PO-CO-NS和WA-ER
這樣新的字符串就變成了
new_food = pocons
new_beverage = waer
我正在嘗試使用這種級聯從無限字符串構建新的100個字符串。 這是我到目前為止的內容:
infinite_string
for i in range(0, 32):
new_string += infinite_string[i: i + 1: 3]
我知道這是不對的。 任何幫助表示贊賞
您可以使用:
''.join([c for i, c in enumerate(inputstring, 1) if i % 3])
演示:
>>> food = "popcorns"
>>> beverage = "water"
>>> ''.join([c for i, c in enumerate(food, 1) if i % 3])
'pocons'
>>> ''.join([c for i, c in enumerate(beverage, 1) if i % 3])
'waer'
另一種方法是在首先創建列表后刪除每三個字符:
characters = list(inputstring)
del characters[2::3]
result = ''.join(characters)
演示:
>>> characters = list(food)
>>> del characters[2::3]
>>> ''.join(characters)
'pocons'
使用正則表達式:
>>> import re
>>> re.sub('(..).', r'\1', "popcorns")
'pocons'
>>> re.sub('(..).', r'\1', "water")
'waer'
>>> food = "popcorns"
>>> ''.join(''.join(i) for i in zip(food[0::3], food[1::3]))
'pocons'
可讀高效的版本:
''.join([input_str[i] for i in xrange(input_len) if i % 3 != 2])
我在ipython中測試了四個答案的性能,結果如下:
import re
input_str = 'popcons'
input_len = len(input_str)
%timeit -n 10000 ''.join([input_str[i] for i in xrange(input_len) if i % 3 != 2])
10000 loops, best of 3: 1.07 µs per loop
%timeit -n 10000 ''.join([c for i, c in enumerate(input_str, 1) if i % 3])
10000 loops, best of 3: 1.31 µs per loop
%timeit -n 10000 re.sub('(..).', r'\1', input_str)
10000 loops, best of 3: 8.29 µs per loop
%timeit -n 10000 ''.join(''.join(i) for i in zip(input_str[0::3], input_str[1::3]))
10000 loops, best of 3: 2.06 µs per loop
如果要生成包含x個字符的新字符串,可以嘗試使用range
,但是您需要將字符串索引乘以在每個步驟中檢索到的字符數+跳過的字符數:
s = infinite_string
characters_total = 100
include_characters = 2
skip_characters = 1
step = include_characters + skip_characters
new_s = ''.join(
s[i * step : i * step + include_characters]
for i in range(characters_total / include_characters))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.