Python for-in Loop常见遍历方法

Python021

Python for-in Loop常见遍历方法,第1张

Python的for...in 循环有三种常见用法:

第一,按长度遍历

若不需要索引号index,可以直接用"for obj in obj-list"语句遍历

第二,若既需要索引,又需要成员值,可以用enumerate()函数

enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串),同时输出数据和数据下标,常用于for-in循环。

第三,不关心索引,只希望同时遍历多个列表,可以用zip函数。

zip函数将多个列表作为输入,在每次迭代的时候,将每个列表的当前成员组合成一个元组输出。

纠正一下你的这句话

其实才是真正的filter的入参,而x指的是filter的另一个入参it。

这里的it是一个生成器对象,而filter每次会得到一个由它生成的值。所以x指的不是it,只是it产生的一个值。

至于怎么实现将it中的数据遍历下去,这个很好解释。

我们知道filter接受两个参数function和iterable。而filter的功能就等价于(item for item in iterable if function(item)),它就是这么遍历完的。。。

it里面到底是啥? 正如你知道的,它就是一个生成器对象。每当一次调用结束后它就会挂起,直到下一次被激活。

while True:

n = next(it)

yield nit = filter(_not_divisible(n), it)#怎么就实现了循环遍历 it了?

它的实质就是把得到的每个素数从生成器中剔除。

ES6 一共有 5 种方法可以遍历对象的属性

(1)for...in

for...in 循环遍历对象自身的和继承的可枚举属性(不含 Symbol 属性)。

(2)Object.keys(obj) ie9

Object.keys 返回一个数组,包括对象自身的(不含继承的)所有可枚举属性(不含 Symbol 属性)的键名。

(3)Object.getOwnPropertyNames(obj) ie9

Object.getOwnPropertyNames 返回一个数组,包含对象自身的所有属性(不含 Symbol 属性,但是包括不可枚举属性)的键名。

(4)Object.getOwnPropertySymbols(obj)

Object.getOwnPropertySymbols 返回一个数组,包含对象自身的所有 Symbol 属性的键名。

(5)Reflect.ownKeys(obj)

Reflect.ownKeys 返回一个数组,包含对象自身的(不含继承的)所有键名,不管键名是 Symbol 或字符串,也不管是否可枚举。

以上的 5 种方法遍历对象的键名,都遵守同样的属性遍历的次序规则。

​ 其中兼容性最好的是for... in来进行遍历,因为我们通常只需要遍历对象自身拥有的属性 所以使用 Object.prototype.hasOwnProperty() 兼容到ie5.5 方法来排除继承的属性

注意:即使属性的值是 null 或 undefined ,只要属性存在, hasOwnProperty 依旧会返回 true 。

​ 如果不在意兼容性问题,用keys方法,搭配for... of来遍历也不错,、

​ for...of是es6引入的用于遍历可迭代对象的语法,相当于python里的for in。

​ js的for...in别扭的地方在于,遍历数组和对象都是返回的key值,遍历数组是下标值。for...of遍历数组会返回每一个值,跟foreach类似的效果,但是对于对象,只支持实现了迭代器的对象。