【问题标题】:Python - Replace a given percentage (%) of characters (randomly) in a String?Python - 替换字符串中给定百分比(%)的字符(随机)?
【发布时间】:2017-03-24 07:38:58
【问题描述】:

我有一个字符串,例如

x = "aaaaaaaaaa"

我想替换例如20% 的 "a" 带有 "b" 。我试过了:

x_new = ''.join(i if random.randint(0, 1) else 'b' for i in x) 

但是random.randint(0,1) 我不知道如何获取例如20% 更换。

【问题讨论】:

  • strings length * 0.2 是您需要替换的数字?.. 在这种情况下,奇数长度的字符串会发生什么?
  • 20% 等于五分之一 ...

标签: python string random replace


【解决方案1】:

以下代码以80%的概率保留原来的a字符,否则用b代替

from random import random
x = "aaaaaaaaaa"
rand_replace = lambda c: c if random()<0.8 and c=='a' else 'b'
x_new = ''.join([rand_replace(c) for c in x])

如果您希望字符串替换的总概率为 20%:

rand_replace = lambda c: c if random()<0.8**(1.0/len(x)) and c=='a' else 'b'

【讨论】:

  • @Uri Goren:非常感谢您完整而快速的回答。
  • @Lily - 如果您认为它完全解决了您的问题,您可以接受它。
  • 这不会进行 20% 的替换。概率分布并不像您所说的那样均匀
  • 如果 OP 想要独立替换每个字符(如她的解决方案所建议的那样),那么代码应该保持不变,如果 OP 希望整个字符串发生变化的总概率为 20%,那么0.8 应替换为 (1-0.2)**(len(x))
  • @Uri Goren:非常感谢。我希望整个字符串发生变化的总概率为 20%。
【解决方案2】:
x = "aaaaaaaaaa"
x_new = x.replace('a', 'b', int(len(x) * 0.2) )
print x_new

【讨论】:

  • @Uri Goren:谢谢,但我的印象是在新版本的代码中,前两个字母每次都会被替换(即不是随机的)。
  • 这是@balakumaran.g 的答案,我只是将其格式化为代码
  • @balakumaran.g:谢谢,但 Uri Goren 的代码(评论中提到的更改)更适合我的目的。
猜你喜欢
  • 1970-01-01
  • 2017-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-21
  • 2011-07-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多