Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 替换字符串中50%的字符(随机)_Python_Random_Replace - Fatal编程技术网

Python 替换字符串中50%的字符(随机)

Python 替换字符串中50%的字符(随机),python,random,replace,Python,Random,Replace,我使用replace来扭曲数据,我希望有一个高失真设置,其中每个实例都被替换,一个低失真设置,其中每个实例被替换的几率为50%。例如: x = "aaaaaaaaaa" x = x.replace("a", "b") 'bbbbbbbbbb' x = "aaaaaaaaaa" x = x.5050replace("a", "b") 'aabbabbaab' 如果不重新写入replace,如何执行此操作?使用模块: 如果random.randint的计算结果为0,则此代码基本上“替换”了x中的

我使用replace来扭曲数据,我希望有一个高失真设置,其中每个实例都被替换,一个低失真设置,其中每个实例被替换的几率为50%。例如:

x = "aaaaaaaaaa"
x = x.replace("a", "b")
'bbbbbbbbbb'

x = "aaaaaaaaaa"
x = x.5050replace("a", "b")
'aabbabbaab'
如果不重新写入replace,如何执行此操作?

使用模块:

如果random.randint的计算结果为0,则此代码基本上“替换”了x中的每个字母,并将其保留为“b”,否则保持不变

如果字符串是“aacakedaaasa”之类的复杂字符串,并且您只想替换“a”,请尝试以下操作:

x = ''.join(i if i != 'a' or random.randint(0, 1) else 'b' for i in x)
如果字母不是“a”,则此操作无效,如果是,则在random.randint返回0时将其替换为“b”,如前一示例所示。

使用模块:

如果random.randint的计算结果为0,则此代码基本上“替换”了x中的每个字母,并将其保留为“b”,否则保持不变

如果字符串是“aacakedaaasa”之类的复杂字符串,并且您只想替换“a”,请尝试以下操作:

x = ''.join(i if i != 'a' or random.randint(0, 1) else 'b' for i in x)
如果字母不是“a”,则这没有任何作用,如果是,则在random.randint返回0时将其替换为“b”,如前一示例所示。

您可以使用从字符串填充和大小相同的b字符串构建新列表

>>> from random import sample
>>> x = "aaaaaaaaaa"
>>> ''.join(random.sample(x + "b"*len(x), len(x)))
'baabbbbbba'
注意,与使用random.randint理解字符串相比,这是理解字符串速度的两倍

相反,如果你想要50%的替换率,你可以使用random.shuffle

您可以使用从字符串的填充和大小相同的B字符串构建新列表

>>> from random import sample
>>> x = "aaaaaaaaaa"
>>> ''.join(random.sample(x + "b"*len(x), len(x)))
'baabbbbbba'
注意,与使用random.randint理解字符串相比,这是理解字符串速度的两倍

相反,如果你想要50%的替换率,你可以使用random.shuffle


这是波动率答案的一个变体,允许您指定百分比

def replace_ramd(input_string, pct):
    for r in range(len(input_string)):
        yield input_string[r] if random.randint(0,100) > pct else chr(random.randint(64,127))

这是波动率答案的一个变体,允许您指定百分比

def replace_ramd(input_string, pct):
    for r in range(len(input_string)):
        yield input_string[r] if random.randint(0,100) > pct else chr(random.randint(64,127))

您不需要支架,没有支架也可以正常工作。@DSM当然忘了,不过谢谢提醒!这将提供近50%的替换率,但不是确切的50%替换率。它似乎可以工作,但数据太长太复杂,我真的无法检查。如果我想把它减少到1/3的几率,我会用random.randint0,1替换为random.randint0,2吗?@tkbx是的,这就是你需要做的,但我相信你已经明白了,你不需要括号,没有括号也能正常工作。@DSM当然忘了,不过谢谢提醒!这将提供近50%的替换率,但不是确切的50%替换率。它似乎可以工作,但数据太长太复杂,我真的无法检查。如果我想把概率降低到1/3,我会用random.randint0,1替换random.randint0,2吗?@tkbx是的,这是你需要做的,但我相信你已经知道了