python技巧分享(十)

16 Apr 2018 python技巧分享(十)

这是一个系列文章,主要分享python的使用建议和技巧,每次分享3点,希望你能有所收获。

1 通过索引删除列表元素

my_list = range(0, 10)
print my_list
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
del my_list[9]
print my_list
# [0, 1, 2, 3, 4, 5, 6, 7, 8]
del my_list[5:8]
print my_list
# [0, 1, 2, 3, 4, 8]

示例中,通过del语句,可以很方便删除列表中的某个元素或者部分元素。这里需要注意,指定的索引值不能大于列表最大长度-1,否则会抛出IndexError异常,另外,list对象的pop方法和remove方法也可以删除元素。

2 清空列表元素

my_list = range(0, 10)
print my_list
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print id(my_list)
# 87838600
del my_list[:]
print my_list
# []
print id(my_list)
# 87838600

清空一个列表有很多方式可以实现,但是借助del语句,可以不用生成新的列表对象。示例中可以看到,清空列表元素前和清空后,列表的id没有改变,即没有生成新的对象,可以继续使用该列表。

3 列表解析(list comprehensions)

my_list = range(0, 10)
even_num_list = [e for e in my_list if not e % 2]
print even_num_list
# [0, 2, 4, 6, 8]
odd_num_list = [e for e in my_list if e % 2]
print odd_num_list
# [1, 3, 5, 7, 9]

# syntax: [ expression for target in iterable lc-clauses ]

列表解析很有用,一行代码就可以完成很多功能。示例中,借助列表解析,很方便就从列表中筛选出偶数和奇数,代码少且运行更快。如果使用其他方式实现,难免代码会多一些,并且性能也会差一些。

列表解析语法规则如下:

[ expression for target in iterable lc-clauses ]

lc-clauses表示以下语句(可以是0个或者多个):

for target in iterable if expression

列表解析详见:https://docs.python.org/2/tutorial/datastructures.html#list-comprehensions

LEo at 00:05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏web

javascript -- 变量

931
来自专栏拭心的安卓进阶之路

JavaScript 的闭包用于什么场景

本文翻译自 MDN ( Mozilla Developer Network ): 原文地址:MDN 译文地址:shixinzhang 的博客 词法作用域 考虑如...

2248
来自专栏Golang语言社区

Golang语言社区--【基础知识】循环

可能有一种情况,当你需要执行的代码块多次。在一般情况下,语句顺序执行:在一个函数的第一条语句,首先执行,然后是第二个等等。 编程语言提供了各种控制结构,允许更多...

3547
来自专栏对角另一面

读 Zepto 源码之集合元素查找

这篇依然是跟 dom 相关的方法,侧重点是跟集合元素查找相关的方法。 读Zepto源码系列文章已经放到了github上,欢迎star: reading-zept...

2260
来自专栏领域驱动设计DDD实战进阶

13-TypeScript单例模式

在JavaScript中,要实现设计模式比较复杂。而在TypeScript中因为使用面向对象的思想编程,要实现设计模式的方式与后端语言C#、Java等非常类似。...

3165
来自专栏搞前端的李蚊子

JS——判断一个对象是否为空

判断一个对象是否为空对象,本文给出三种判断方法: 1.最常见的思路,for...in...遍历属性,为真则为“非空数组”;否则为“空数组” ?  2.通过JSO...

4448
来自专栏菜鸟致敬

【lua菜鸟③】变量和循环

{lua的特点:①不需要分号结尾,但是支持分号啊,如果一行写多个语句就用它啊②没有花括号③函数也不需要声明类型,却和c++的语法极其类似}

1082
来自专栏移动开发

java split()

java提供了split根据传入的分隔符,返回数组的方法.但是对于一些特殊字符我们要注意下,以防获取的不是我们想要的结果. 如想要根据”竖线”分隔:

981
来自专栏十月梦想

流程控制的另一种书写方式

多个层次的嵌套会有多个括号看起来比较繁琐,流程控制可以用:代表左侧的{;endif、endswitch、endfor、endwhile、endforeach代表...

917
来自专栏Astropeak

为什么不需要为Python对象添加 getter 和 setter

1252

扫码关注云+社区

领取腾讯云代金券