python为一对字符和两个反向字符交换位置

python为一对字符和两个反向字符交换位置,python,Python,我有这个代码,但不完整。我来解释一下过程 我有话要说 abcdefgh 现在我将这个单词配对成两个字符 ab cd ef gh 然后每2对呼气一次 cd ab gh ef 接下来,我将反转这些字符对 dc ba hg fe 如果单词的长度是偶数,并且一对或多个字符也是偶数,就会发生这种情况 如果这对单词是奇数,而长度也是奇数呢 示例:abcdefghi 这将是ab cd ef gh i 如果单词的长度是奇数。我将为最后一对添加填充“x” 然后像以前一样做同样的过程。但这对角色也很奇怪。因

我有这个代码,但不完整。我来解释一下过程

我有话要说

abcdefgh
现在我将这个单词配对成两个字符

ab cd ef gh
然后每2对呼气一次

cd ab gh ef
接下来,我将反转这些字符对

dc ba hg fe
如果单词的长度是偶数,并且一对或多个字符也是偶数,就会发生这种情况

如果这对单词是奇数,而长度也是奇数呢

示例:
abcdefghi

这将是<代码>ab cd ef gh i

如果单词的长度是奇数。我将为最后一对添加填充<代码>“x”

然后像以前一样做同样的过程。但这对角色也很奇怪。因此,最后一对将保留其位置

cd ab gh ef ix
然后将字符反转

dc ba hg fe xi
现在,我可以添加填充,并为每个单词创建一对。我仍在考虑如何交换他们的位置和反转角色

dc ba hg fe
这是我的密码

def is_odd(num):
   return num % 2 != 0

IMSI = "5150201234567"

count = len(str(IMSI))

if (is_odd(count) is True):
    IMSI = str(IMSI)+"f"


count = len(str(IMSI)) 


x = 0
z = []


while x <= count-2:
    a = x
    x = x + 2
    b = x
    z.append(IMSI[a:b][::-1])

print z
# output is ['15', '05', '02', '21', '43', '65', 'f7']
def为奇数(num):
返回数量%2!=0
IMSI=“5150201234567”
计数=len(str(IMSI))
如果(是奇数(计数)为真):
IMSI=str(IMSI)+“f”
计数=len(str(IMSI))
x=0
z=[]

而x这里没什么特别的。所有基本操作

s = 'abcdefgh'
# s = 'abcdefghi'

# pad
if len(s) % 2:
    s += 'x'

l = []
# split
for i in range(0,len(s),2):
    l.append(s[i:i+2])

# switch
for i in range(0,len(l),2):
    if i+1 < len(l):
        l[i+1], l[i] = l[i:i+2]

# reverse each
l = [x[::-1] for x in l]

print l
s='abcdefgh'
#s=‘abcdefghi’
#垫
如果透镜%2:
s+='x'
l=[]
#分裂
对于范围内的i(0,len(s),2):
l、 追加(s[i:i+2])
#开关
对于范围内的i(0,len(l),2):
如果i+1
这里没什么特别的。所有基本操作

s = 'abcdefgh'
# s = 'abcdefghi'

# pad
if len(s) % 2:
    s += 'x'

l = []
# split
for i in range(0,len(s),2):
    l.append(s[i:i+2])

# switch
for i in range(0,len(l),2):
    if i+1 < len(l):
        l[i+1], l[i] = l[i:i+2]

# reverse each
l = [x[::-1] for x in l]

print l
s='abcdefgh'
#s=‘abcdefghi’
#垫
如果透镜%2:
s+='x'
l=[]
#分裂
对于范围内的i(0,len(s),2):
l、 追加(s[i:i+2])
#开关
对于范围内的i(0,len(l),2):
如果i+1
使用一点and的功能方法:


使用一点和的功能方法:


问题是什么?如果唯一的问题是你的代码不完整,为什么你不能完成它?你有没有试过什么但没用?发布您尝试的内容,我们可以帮助您调试。@Brionius,因为我仍在考虑下一步。我似乎不知道这些算法是如何实现的,问题是什么?如果唯一的问题是你的代码不完整,为什么你不能完成它?你有没有试过什么但没用?发布您尝试的内容,我们可以帮助您调试。@Brionius,因为我仍在考虑下一步。我似乎不知道这些算法是怎么实现的。你太棒了。我从没想过这可以在循环中完成。你太棒了。我从来没有想过这可以在for循环中完成。我确信这里有一种更干净的方法来处理双组块:)使用
chain.from\u iterable
或代替
chain(*a\u list)
。整个事情可以这样做:
revstr=lambda s:s[:-1];xs=map(revstr,imapcat(revstr,ichunks(2,ichunks(2,s)))
。它不再可读:)我确信这里有一种更干净的方法来处理双组块:)使用
chain.from\u iterable
或代替
chain(*a\u list)
。整个事情可以这样做:
revstr=lambda s:s[:-1];xs=map(revstr,imapcat(revstr,ichunks(2,ichunks(2,s)))
。不再可读:)