我知道
"123abc" * 2
评估为"123abc123abc"
,但有一种简单的方法可以重复单个字母N次,例如将"123abc"
转换为"112233aabbcc"
或"111222333aaabbbccc"
?
答案 0 :(得分:18)
怎么样:
>>> s = '123abc'
>>> n = 3
>>> ''.join([char*n for char in s])
'111222333aaabbbccc'
>>>
(从生成器表达式更改为列表comp,因为在联接中使用列表comp是faster)
答案 1 :(得分:4)
另一个itertools
- 问题 - 过度复杂风格的选项repeat()
,izip()
和chain()
:
>>> from itertools import repeat, izip, chain
>>> "".join(chain(*izip(*repeat(s, 2))))
'112233aabbcc'
>>> "".join(chain(*izip(*repeat(s, 3))))
'111222333aaabbbccc'
或者,"我知道正则表达式,我会将它用于一切" -style选项:
>>> import re
>>> n = 2
>>> re.sub(".", lambda x: x.group() * n, s) # or re.sub('(.)', r'\1' * n, s) - thanks Eduardo
'112233aabbcc'
当然,在实践中不要使用这些解决方案。
答案 2 :(得分:3)
或者另一种方法是使用map
:
"".join(map(lambda x: x*7, "map"))
答案 3 :(得分:2)
因为我把numpy用于所有事情,所以我们走了:
import numpy as np
n = 4
''.join(np.array(list(st*n)).reshape(n, -1).T.ravel())
答案 4 :(得分:1)
如果你想重复个别字母,你可以用n个字母代替字母,例如
>>> s = 'abcde'
>>> s.replace('b', 'b'*5, 1)
'abbbbbcde'
答案 5 :(得分:1)
@Bahrom的答案可能比我的更清楚,但只是说这个问题有很多解决方案:
>>> s = '123abc'
>>> n = 3
>>> reduce(lambda s0, c: s0 + c*n, s, "")
'111222333aaabbbccc'
请注意,reduce
不是python 3中内置的,您必须使用functools.reduce
。
答案 6 :(得分:1)
或使用正则表达式:
String sql = "CREATE TABLE coupon40 (id BIGINT PRIMARY KEY, title VARCHAR(25), start_date DATE,"
+ " end_date DATE,"
+ "amount INTEGER, type varchar(20) NOT NULL CHECK (type IN('Food', 'Electric', 'Traveling', 'Entertainment', 'Sport')), "
+ "message VARCHAR(25), price DOUBLE PRECISION, image VARCHAR(25))";
答案 7 :(得分:1)
另一种方式:
def letter_repeater(n, string):
word = ''
for char in list(string):
word += char * n
print word
letter_repeater(4, 'monkeys')
mmmmoooonnnnkkkkeeeeyyyyssss
答案 8 :(得分:1)
这是我幼稚的解决方法
text = "123abc"
result = ''
for letters in text:
result += letters*3
print(result)
输出: 111222333aaabbbccc
答案 9 :(得分:0)
Python:
def LetterRepeater(times,word) :
word1=''
for letters in word:
word1 += letters * times
print(word1)
word=input('Write down the word : ')
times=int(input('How many times you want to replicate the letters ? '))
LetterRepeater(times,word)