簡體   English   中英

連接字符串的每兩個字符

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM