Iterable:此处对应的是指可以进行循环的变量类型,例如array, dictionary等等。
Iterator:当重复对其使用next()函数时,产生新的值并且更新iterator至新状态(该串中的下一个元素)
对某个iterable使用iter()函数,即可得到其iterator,对新的iterator使用next(), 每一次的结果为iterable中的一个元素
a="123456"
ita=iter(a)
print(next(ita))
print(next(ita))
print(next(ita))
输出结果为1 2 3
enumerate()函数可以给iterable 加上序号,
a=['x','y','z']
a_enum=list(enumerate(a))
for ind,val in a_enum:
print(a_enum)
输出结果为 1 x, 2 y, 3 z
zip()函数则可以合并多个tuple
mutant_data = list(zip(mutants,aliases,powers))
for value1,value2,value3 in mutant_data:
print(value1, value2, value3)
或者可以利用*来进行结果打印,但是打印之后原zip中的值会消耗,想要再用需重新定义
print(*mutant_data)
是这么个模式,结果就不说了
也可以将zip中的东西直接给到不同的tuple中,
z1=zip(x,y)
result1, result2 = zip(*z1)
最终result1,result2分别存了x,y的信息
当遇到大量数据时,需要分批处理,此时要用到chunk功能。
for chunk in pd.read_csv('tweets.csv', chunksize=10):
注意要设置chunksize,确定好每次搬运的数量
List Comprehension
简而言之就是通过一句话来完成一个需要循环操作的iterable。
以下是一个用来获得一组0到9的平方的序列的代码
squares = [i**2 for i in range(10)]
用此方法还可以进行嵌套,例如想要创造一个5*5的矩阵,其每一行都为[0,1,2,3,4]
matrix=[[row for row in range(4)] for col in range(4)]
Advanced comprehension
在循环时,同样可以添加循环条件,筛选我们需要的元素写入新的数组/字符串
格式是[ output expression for iterator variable in iterable if predicate expression ].
例如
new_fellowship = [member for member in fellowship if len(member)>=7]
该操作是用来选出在fellowship中长度大于7的写进新的tuple。
或者也可以用if-else语句来完成同样的操作。
[output expression if condition else another output for variable in iterable]
用if-else来完成上一步的代码:
new_fellowship = [member if len(member)>=7 else "" for member in fellowship]
list comprehension也可以拿来操作字典,区别是要用花括号{},然后每个循环对应的内容是 key: value
new_fellowship = {member:len(member) for member in fellowship}
上面的代码就是用member 来当key,其长度作为value
generator expression
把list comprehension的[ ]替换为()后,就可以把输出值转化为generator的形式了。如果想转成list就用一下list()函数。
这么做的原因是有时候list的长度过长系统无法存储,用generator之后想要读取数据就用next()函数,只有需要的时候才出来结果,节省空间
也可以用generator函数来进行同样的操作,但是每一步的return改为使用yield操作
def genefunc(m):
for i in m:
yield i