有可能以随机的方式每两个字符洗一个字吗?
与hello world
更改为ehllo owlrd
或hello wolrd
或ehll owolrd
一样。
我无法获得以下结果:olleh dlrow
和lleho wodlr
答案 0 :(得分:4)
是的,将您的字符串放在一些可变数据结构中,如cross validation
。然后一个简单的算法是从第二项开始迭代,然后随机交换:
list
所以,例如:
>>> 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)
...
答案 1 :(得分:3)
分解两对,样本和重组:
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循环。指定
range(0, len(s), 2)
遍历步长为2的对象。最好的
容易可视化的方法是将i
设置为等于其渐进值:
s[0:0+2]
将为您提供'he'
,依此类推。步骤1的结果是
['he', 'll', 'o ', 'wo', 'rl', 'd']
。
步骤2的内部部分也使用列表推导来迭代每个
在步骤1中建立的对。for two in twos
表示执行操作
对于上一步中建立的列表twos
中的每个元素。您可以将two
的每个实例替换为您喜欢的任何字词,例如pair
(只是不要使用keyword)。然后使用''.join()
将破碎的字符串连接在一起。
注意:这会将空格视为涉及改组的字符。