python交换位置的一对字符和反向2个字符

时间:2014-06-06 01:37:40

标签: python

我有这段代码但不完整。我只是解释一下这个过程。

我有话要说。

abcdefgh

现在我将这个单词分成2个字符。

ab cd ef gh

然后每两对发一次他们的位置

cd ab gh ef
接下来,我将颠倒这对字符。

dc ba hg fe

如果单词的长度是偶数且对或字符也是偶数,则会发生这种情况。

如果这对单词是奇数而长度也是奇数怎么办?

示例:abcdefghi

这将是.. ab cd ef gh i

如果单词的长度是奇数。我将为最后一对添加填充。 "x"

ab cd ef gh ix

然后像以前一样做同样的过程。但是这对字符也很奇怪。因此最后一对将保留它的位置。

cd ab gh ef ix

然后反转字符;

dc ba hg fe xi

现在我可以添加填充并为每个单词创建一对。我还在考虑如何交换他们的立场并扭转角色。

这是我的代码。

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']

2 个答案:

答案 0 :(得分:2)

这里没什么好看的。所有基本操作。

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

答案 1 :(得分:2)

功能方法使用了一点itertoolsfuncy

from funcy import ichunks
from itertools import chain


s = "abcdefghi"

if len(s) % 2:
    s += "x"

xs = [x[::-1] for x in chain(*[x[::-1] for x in ichunks(2, ichunks(2, s))])]