dnastar拼接反向互补序列_一起看流畅的python:序列构成的数组

深入理解 Python 中的不同序列类型,不但能让我们避免重新发明轮子, 它们的 API 还能帮助我们把自己定义的 API 设计得跟原生的序列一样, 或者是跟未来可能出现的序列类型保持兼容。

列表推导 196c461fe60628eb333415d0aac87a5b.png

第一种方法,用for循环逐个向列表里添加数据。

第二种方法,就是列表推导的方法。通过for循环快速构造列表。

第三种方法是map/filter组合构造法。filter用于过滤序列,map对指定序列做映射,对每一个序列中的元素调用函数,返回新的列表。

在python2中,使用列表推导可能会造成变量泄露的问题,即列表内for循环的变量值影响到列表外相应的变量的数值。在python3中,列表推导中的for是局部变量,并不会造成变量泄露。

生成器表达式

7bd9f52b723dc35bb41612e32e68d80e.png

生成器表达式与列表推导的区别就在于,生成器表达式使用的是圆括号,动态构成列表。列表推导构造时,一次性分配空间,可能会造成对内存空间的浪费,用生成器表达式则是动态扩充空间,适应需求。

元组拆包

    元组其实是对数据的记录:元组中的每个元素都存放了记录中一个字段 的数据,外加这个字段的位置。正是这个位置信息给数据赋予了意义。 

    如果只把元组理解为不可变的列表,那其他信息——它所含有的元素的 总数和它们的位置——似乎就变得可有可无。但是如果把元组当作一些 字段的集合,那么数量和位置信息就变得非常重要了。

元组拆包就是记录分配给属性的过程。

d48e570813afa6da879b3b918431db6c.png

具名元组

collections.namedtuple 是一个工厂函数,它可以用来构建一个带 字段名的元组和一个有名字的类——这个带名字的类对调试程序有很大 帮助。

调用namedtuple方法时,传入两个参数,第一个是元组名字(或可当成类的名字),第二个参数就是类里面的各个属性的名字。

切片

    在切片和区间操作里不包含区间范围的最后一个元素是 Python 的风格, 这个习惯符合 Python、C 和其他语言里以 0 作为起始下标的传统。

    可以用 s[a:b:c] 的形式对 s 在 a 和 b 之间以 c 为间隔取值。c 的值还可以为负,负值意味着反向取值。

    如果把切片放在赋值语句的左边,或把它作为 del 操作的对象,我们就 可以对序列进行嫁接、切除或就地修改操作。

序列的+和*

    通常 + 号两侧的序列由 相同类型的数据所构成,在拼接的过程中,两个被操作的序列都不会被 修改,Python 会新建一个包含同样类型数据的序列来作为拼接的结果。

my_list = [[]] * 3 来初始化一个 由列表组成的列表,但是你得到的列表里包含的 3 个元素其实是 3 个引用,而且这 3 个引用指向的都是同一个列表。

根据实际情况可选择列表推导:

9b2e4230cdbc97b48ed2495ccde142a1.png f2dc4f84-6d42-eb11-8da9-e4434bdf6706.svg

喜欢扫码关注

f3dc4f84-6d42-eb11-8da9-e4434bdf6706.svg 8a57ce92511a178aadc71193f6ff5b8d.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值