CheckIO题解:OLD LIBRAY 里的部分题目

这里只有OLD LIBRAY 里的部分题目,其他的还没做。

Dot in numbers

我的方法就一行:

re.sub(r'(\d)(?=(\d\d\d)+(?!(\d|th)))', r'\1.', txt)
用到正则表达式里环视功能。具体可以参考《精通正则表达式》的环视部分章节。

简单来说就是,匹配一个数字后有且仅有3的倍数个数字的位置


All in row

def checkio(arr):
    'convert all elements in arr in one row'
    l = [i for i in list_iter(arr)]
    return l

def list_iter(nested):
    try:
        for sublist in nested:
            for element in list_iter(sublist):
                yield element
    except TypeError:
        yield nested

这里用到了生成器,可以参考《Python基础教程》里递归生成器部分。

代码里精炼的使用try、except 而不必使用 if isinstance() 也是参考的书上的例子。


Transposed Matrix

#最短的方法
list(map(list, zip(*matr)))
#我的方法
[[matr[i][j] for i in range(len(matr))] for j in range(len(matr[0]))]
这里是我没有理解内建函数zip,以至于写了这几层嵌套。
zip()函数接受多个列表作为参数,将各个列表的元素按相同索引组成组元并形成新的列表。各个组元的长度为参数中最短的列表长。如:

>>> list(zip(['a', 'b'], [1, 2], ['c', 'd', 'e']))
[('a', 1, 'c'), ('b', 2, 'd')]



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值