Python 在一个单词中随机洗牌每两个字母

Python 在一个单词中随机洗牌每两个字母,python,python-3.x,Python,Python 3.x,有可能以随机方式将两个字符中的一个单词混洗吗? 就像hello world变成了Ehlo owlrd或hello world或ehll owlrd 我无法得到如下结果:olleh Dllow和lleho wodlr是的,将字符串放入一些可变的数据结构中,如列表。然后,一个简单的算法是从第二项开始迭代两次,然后随机交换: >>> def shuffle_by_two(word): ... wordl = list(word) ... for i in range(

有可能以随机方式将两个字符中的一个单词混洗吗? 就像hello world变成了Ehlo owlrd或hello world或ehll owlrd


我无法得到如下结果:olleh Dllow和lleho wodlr

是的,将字符串放入一些可变的数据结构中,如列表。然后,一个简单的算法是从第二项开始迭代两次,然后随机交换:

>>> def shuffle_by_two(word):
...     wordl = list(word)
...     for i in range(1, len(word), 2):
...         if random.randint(0, 1):
...             wordl[i-1], wordl[i] = wordl[i], wordl[i-1]
...     return ''.join(wordl)
...
例如:

>>> shuffle_by_two("hello world")
'hello wolrd'
>>> shuffle_by_two("hello world")
'hello wolrd'
>>> shuffle_by_two("hello world")
'ehllo owrld'
>>> shuffle_by_two("hello world")
'ehllo world'
>>> shuffle_by_two("hello world")
'hello owlrd'
>>> shuffle_by_two("hello world")
'ehll oowrld'
>>>
密码 将两对分开,取样,然后重新组合:

from random import sample

s = 'hello world'
twos = [s[i:i+2] for i in range(0, len(s), 2)] # Step 1
twos = ''.join([''.join(sample(two, len(two))) for two in twos]) # Step 2

print(twos)
ehll oowrld
演练 步骤1使用列表理解,基本上是一个压缩的for循环。指定 range0,lens,2在步长为2的对象上迭代。最好的 易于可视化的方法是将i设置为其累进值: s[0:0+2]会给你“他”,等等。步骤1的结果是 ['he','ll','o','wo','rl','d']

步骤2的内部部分还使用列表理解来迭代每个 在步骤1中建立的对。两个人中有两个人说要做这个动作 对于列表中的每个元素,在上一步中建立了两个。你可以用任何你喜欢的词来替换两个的每个实例,比如pair就是不使用a。然后使用.join将断开的字符串重新连接在一起


注意:这将空格视为要参与洗牌的字符。

当然。我导入了随机库并尝试使用。加入。。。对不起,我在电话里,回家时会用正确的代码编辑吗?您希望如何处理空间?在第三个示例输出中,似乎空格被视为另一个字符:ehll owolrd您可能想阅读,并相应地重新回答您的问题。这可能有助于您将来与SO的互动,当像@Brad等人这样的好灵魂不会在那里为你改变规则的时候。一旦你读了,你就会明白更多。它就像一个符咒,但不幸的是,我不理解你的代码。我正在尝试,但我是python的新手。谢谢你,更新了一些注释。谢谢你,布拉德。当我得到它时,我明白了代码是多么简单。