python读取字符串按列分配后按行读出

320 篇文章 88 订阅
151 篇文章 4 订阅

问题:

输入一个字符串和一个数字,数字代表分为几行,需要按照给定的列存储方法存储下来之后按行拼接读出,如:

输入:TNGDWXAZQSCVBK,3

输出:TWQBNDXZSVKGAC

中间转化的时候会形成这样的图形:

T   W   Q   K
N D X Z S V B
G   A   C 


化为矩阵可能看得更清晰一点:


T 0 W 0 Q 0 B
N D X Z S V K
G 0 A 0 C 0 0


0是作为空白填充进去的,下面看具体的实现:


#!usr/bin/env python
#encoding:utf-8


'''
__Author__:沂水寒城
功能:zigzag_pattern
T   W   Q   K
N D X Z S V B
G   A   C                                 
convert("TNGDWXAZQSCVBK", 3) should return "TWQBNDXZSVKGAC".
'''

def convert_test(one_str,num):
    '''
    '''
    mod=len(one_str)%(num+1)
    if mod==0:
        cols=(len(one_str)/(num+1))*2
    else:
        cols=(len(one_str)/(num+1))*2+1
    rows=num 
    #print 'rows, cols', rows, cols
    matrix=[]
    for i in range(rows):
        matrix.append([0]*cols)
    one_str_list=list(one_str)
    for j in range(cols):
        if j%2==0:
            for i in range(rows):
                if len(one_str_list):
                    matrix[i][j]=one_str_list.pop(0)
        else:
            matrix[1][j]=one_str_list.pop(0)
    #print matrix
    # for one in matrix:
    #     one_list=[str(onec) for onec in one]
    #     print ' '.join(one_list)
    res=''
    for one_list in matrix:
        one_list=[str(one) for one in one_list]
        res+=''.join(one_list)
    return ''.join(res.split('0'))


if __name__ == '__main__':
    print convert_test("TNGDWXAZQSCVBK", 3)
    print convert_test("PAYPALISHIRING", 2)
    print convert_test("PAYPALISHIRING", 4)


结果如下:


TWQBNDXZSVKGAC
PPIINAYALSHRIG
PLRAAIIIYSNPHG
[Finished in 0.3s]


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Together_CZ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值