20210113.使用嵌套循环生成并转置双层列表的python代码

20210113.使用嵌套循环生成并转置双层列表的python代码

#这段代码为《python编程快速上手——让繁琐工作自动化》一书中的6.7实践作业,可以将双层列表进行纵横转置打印出来。
#我还加了一段代码,可以生成任意指定外层元素数、内层元素数的由递增的连续自然数构成的双层列表。
#使用到的知识点:使用变量指代变量类型/创建函数/嵌套for循环
#这是我第二份python实践作业,记录在此。欢迎指正。

a=type([1,2])   #创建一个变量a,用于指代列表类型
#下面创建函数,判断是否为列表。是则返回1,否则返回0。
#如要判断内层是否也是list类型,可以用for循环遍历外层元素,结合下面的函数来判断。偷懒不写了。。
def isThatList(x):
    if type(x)==a:
        print("yes,it's a list")    #printTable()每次调用isThatList(),都会留下印痕
        return 1
    else:
        print("no,it's not a list") #printTable()每次调用isThatList(),都会留下印痕
        return 0

def printTable(y):
    if isThatList(y)==0:
        print("对不起,您输入的不是列表类型的数据。您应该输入一个双层列表")
    else:
#这里假设y这个双层列表共计有3个子列表,每个子列表有5个元素,那么打印时就需要转化为5行,每行3格元素
#这样假设过后,更为具象,编写下面的代码时就更容易入手验证了。
        for i in range(0, len(y[0]) ): #总共需要打印5行,因此这里用内层len
            for j in range(0,len(y)):  #每行有3格,因此这里用外层len
                print(y[j][i],end='\t')
            print('')
#由于写上面循环部分代码时是假定的是3*5格式验证的,所以这里table样例采用另一种格式比如7*4格式交叉验证
table=[[1,2,3,4],
[5,6,7,8],
[9,10,11,12],
[13,14,15,16],
[17,18,19,20],
[21,22,23,24],
[25,26,27,28]]
printTable(table)
#本来上一行代码是想写成输入任意列表: table=input("请输入一个双层列表数据,每个内层列表都要含有相同数量的字符串:")
#然而随后意识到,input输入的全都是字符串,无法轻易转成双层列表。书中实践题目也没要求,那就算了吧。
print("测试成功。perfect!")
#但是,手动编制上面的7*4表格挺费劲。下面尝试实现自动根据两个输入参数(外层元素数/内层元素数)生成每个内外层元素递增的双层列表:
#实践题目没有要求这个,我自己加的戏。
len1=input('这里可以自动生成双层列表,请输入外层列表的元素个数(任意自然数):')
len2=input('这里可以自动生成双层列表,请输入内层列表的元素个数(任意自然数):')
#想象上面输入的len1为7,len2为4,即以上面的table变量作为为下面循环的心中原型:
print('[',end='')
for i in range(0,int(len1)):
    print('[', end='')
    for j in range(0,int(len2)):
        if j!=int(len2)-1:  print(int(len2)*i+j+1,end=',')
        elif i==int(len1)-1: print(int(len2)*i+j+1,end=']')
        else:               print(int(len2)*i+j+1,end='],')
#第一行要实现的效果是4*0+1,4*0+2,4*0+3,4*0+4,共len2次。先写好数组,再加上括号
    if i!=int(len1)-1:    print('')
    else:                 print(']')
print('测试又成功了,perfect!可以很方便地生成任意长宽的自然数列构成的双层列表啦')
print("本例50行代码,用了2小时多,首尾中括号的处理比较麻烦但还是搞定了")

如果输入8、4,那么生成的自然数列构成的双层列表会是下面这样的效果:

[[1,2,3,4],
[5,6,7,8],
[9,10,11,12],
[13,14,15,16],
[17,18,19,20],
[21,22,23,24],
[25,26,27,28],
[29,30,31,32]]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值