在python,for的基本使用方法如下

for item in sequence:
    expression

其中sequence 为可迭代的对象,item 为序列中的每个对象
可以分为以下两类:

目录

  • 1 一类是列表list,元组tuple,字典dict,set集合,str字符串等的集合数据类型。
    • 1.1 对于列表,元组,集合以及字符串
    • 1.2 对于字典
    • 1.3 对于range()
    • 1.4 其它用法
  • 2 一类是generator,包括生成器和带yield的generator function。
  • 3 列表生成式

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