python for循环用法详解
在python,for的基本使用方法如下
for item in sequence:
expression
其中sequence 为可迭代的对象,item 为序列中的每个对象
可以分为以下两类:
目录
1 一类是列表list,元组tuple,字典dict,set集合,str字符串等的集合数据类型。
1.1 对于列表,元组,集合以及字符串
List = [1,"a",3,4,5]
for item in List:
print(item, end=" ")
Tuple = (1,"a",3,4,5)
for item in Tuple:
print(item, end=" ")
Set = {1,"a",3,4,5}
for item in Set:
print(item, end=" ")
Str = '1a345'
for item in Str:
print(item, end=" ")
#这三个循环的结果都是一样的
#1 a 3 4 5
1.2 对于字典
对于字典,如果直接使用for循环只会输出键
Dict = {1:"a",2:"b",3:"c"}
for item in Dict:
print(item, end=" ")
#结果
#1 2 3
如果想要输出值或者同时输出键和值,就要添加.values()和.items()
Dict = {1:"a",2:"b",3:"c"}
for item in Dict.values():
print(item)
#结果
#a
#b
#c
Dict = {1:"a",2:"b",3:"c"}
for item in Dict.items():
print(item)
#结果
#(1, 'a')
#(2, 'b')
#(3, 'c')
1.3 对于range()
for循环也经常和range搭配使用,range有三种用法
1.range(start,stop)
其中start是序列的起始值,stop是序列的结束至,但不包括该值,即[start,stop)
for i in range(0,2):
print(i)
#结果
#0
#1
2.range(stop),相当于range(0,stop)
for i in range(2):
print(i)
#结果
#0
#1
3.range(start,stop,step)
step 代表的为步长。表示以start为起点,step为步长的等差数列,直至数列等于或者大于 stop
for i in range(1,6,2):
print(i)
#结果
#1
#3
#5
1.4 其它用法
如果想用for循环输出序列的元素同时指出该元素的下标时,可以使用enumerate()函数
List = [1,"a",3,4,5]
for i, item in enumerate(List):
print(i,item)
#0 1
#1 a
#2 3
#3 4
#4 5
可以使用isinstance()判断一个对象是否是可迭代的对象:
List = [1,"a",3,4,5]
Int = 1
from collections.abc import Iterable
print(isinstance(List, Iterable))
print(isinstance(Int, Iterable))
#True
#False
2 一类是generator,包括生成器和带yield的generator function。
先通过for循环生成一个生成器(generator),可以通过for循环输出生成器的内容
List = [1,"a",3,4,5]
gen = (item for item in (List))
print(type(a))
print(a)
for item in gen:
print(item)
#结果
#<class 'generator'>
#<generator object <genexpr> at 0x000002A46A696B48>
#1
#a
#3
#4
#5
创建带yield的generator function。例如,斐波拉契数列的生成器
def fib(max):
n, a, b = 0, 0, 1
while n < max:
yield b
a, b = b, a + b
n = n + 1
return 'done'
for item in fib(15):
print(item, end=" ")
#结果
# 1 1 2 3 5 8 13 21 34 55
3 列表生成式
可以通过for循环生成列表
a = [i*i for i in range(5)]
print(type(a))
print(a)
#<class 'list'>
#[0, 1, 4, 9, 16]
b = [m + n for m in 'ABC' for n in 'XYZ']
print(type(b))
print(b)
#<class 'list'>
#['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']
通过嵌套for循环生成高维的列表
a = [[j for j in range(3)] for i in range(2)]
print(a)
#[[0, 1, 2], [0, 1, 2]]
使用列表生成式的时候,可以加上if…else
下面这个代码只使用偶数
a = [x for x in range(1, 11) if x % 2 == 0]
print(a)
#[2, 4, 6, 8, 10]
但是if后面再加上else却报错,例如
a = [x for x in range(1, 11) if x % 2 == 0 else 0]
print(a)
#File "<ipython-input-17-fc6380b07104>", line 1
# a = [x for x in range(1, 11) if x % 2 == 0 else 0]
# ^
# SyntaxError: invalid syntax
这是因为跟在for后面的if是一个筛选条件,不能带else。
而如果把if写在for前面必须加else,否则报错。这是因为for前面的部分是一个表达式,它必须根据x计算出一个结果。因此,考察表达式:x if x % 2 == 0,它无法根据x计算出结果,因为缺少else,必须加上else
a = [x*x if x % 2 == 0 else x for x in range(1, 5)]
print(a)
#[1, 4, 3, 16]
本文地址:https://blog.csdn.net/weixin_44008424/article/details/110245846