python 高级编程 这里面说的也太简略了吧,只有个例子,别的啥都没,
这种方式是从正常的for循环改写过来的,但是效率要高一些,
[i for i in range(10) if i%2==0]
example 2:[i+m for i in range(10) m for m in range(6)]
貌似见到的例子都可以分三个部分,先是生成的借过列表中的元素;再是一个原始列表,两次都是range(10);第三部分是个filter(??)或者循环嵌套(??),第三部分是可以没有的,example 3:
[i*2 for i in [ i for i in range(10) ] ]
推导的嵌套,两个Comprehension都没有第三部分,当要从一个旧列表中生成一个新列表时,这是个好方法;
类似的,当需要列表中每个元素都调用某个函数并返回结果时,可以使用map()函数。
当每次只需要列表中的一个元素时,应使用生成器,避免一次将整个列表调入内存。
一个比较实际的用途是,就是字典遍历中删除,
如果按照正常的思路:
但是实际运行时,会报 RunTimeError,因为在遍历中改变了遍历对象,类似于在C++中使用迭代器的时候,不能删除一样,否则就找不着北了,d = {...} for i in d: if d[i] == 0: del(d[i])
网上的说法是使用 d.keys()
d = {...} for k in d.keys(): if d[k] == 0: del(d[i]) 但是在 3.2 版本中,这个也会报同样的错, 目前找到的解决办法就是 列表推导
d = {...} d = [(k,v) for k,v in d.items() if v != 0]
11-09-15 python 列表推导List Comprehension&
最新推荐文章于 2025-04-24 19:54:05 发布