是否有pythonic方法在现有字符串的随机位置插入空格字符?

时间:2010-11-28 12:15:05

标签: string python

有一种pythonic方式来实现这个:

  

插入/ spaces_1 / U + 0020 SPACE   字符到/ key_1 /随机   开头或结尾以外的头寸   字符串。

/ spaces_1 /是整数,/ key_1 /是任意现有字符串。

感谢。

7 个答案:

答案 0 :(得分:2)

python中的

字符串是不可变的,因此您无法在适当的位置更改它们。但是:

import random

def insert_space(s):
    r = random.randint(1, len(s)-1)
    return s[:r] + ' ' + s[r:]

def insert_spaces(s):
    for i in xrange(random.randrange(len(s))):
        s = insert_space(s)
    return s

答案 1 :(得分:1)

我将随意决定你不要相邻地插入两个空格 - 每个插入点仅使用一次 - 并且“insert”不包括“append”和“prepend”。

首先,构建一个插入点列表......

insert_points = range (1, len (mystring))

从该列表中挑选一个随机选择,并对其进行排序......

import random
selected = random.sample (insert_points, 5)
selected.sort ()

列出你的字符串片段......

selected.append (len (mystring))  #  include the last slice
temp = 0  #  start with first slice
result = []
for i in selected :
  result.append (mystring [temp:i])
  temp = i

现在,构建了新的字符串......

" ".join (result)

答案 2 :(得分:1)

以下是基于列表的解决方案:

import random

def insert_spaces(s):
    s = list(s)
    for i in xrange(len(s)-1):
        while random.randrange(2):
            s[i] = s[i] + ' '
    return ''.join(s)

答案 3 :(得分:1)

因为还没有人使用map

import random
''.join(map(lambda x:x+' '*random.randint(0,1), s)).strip()

答案 4 :(得分:0)

如果您想添加多个空格,请转到

s[:r] + ' '*n + s[r:]

答案 5 :(得分:0)

来了......

def thePythonWay(s,n):
    n = max(0,min(n,25))
    where = random.sample(xrange(1,len(s)),n)
    return ''.join("%2s" if i in where else "%s" for i in xrange(len(s))) % tuple(s)

答案 6 :(得分:0)

我们将随机选择添加空格的位置 - 在字符串的char 0,1,... n-2之后(n-1是最后一个字符,之后我们不会放置空格);然后通过用(原始字符)+''替换指定位置中的字符来插入空格。这与Steve314的解决方案一致(即保留您不需要连续空格的假设 - 这限制了您可以拥有的总空间),但不使用列表。

因此:

import random
def insert_random_spaces(original, amount):
    assert amount > 0 and amount < len(original)
    insert_positions = sorted(random.sample(xrange(len(original) - 1), amount))
    return ''.join(
        x + (' ' if i in insert_positions else '')
        for (i, x) in enumerate(original)
    )