2021-3-6python语法知识(3)for循环与列表入门

本次的内容将涉及for的循环,以及简单的列表内容

for的循环
1:回顾上期的while:
代码如下:

i = 1
while i < 11:
    if i % 2 == 0:
        print (i)
    i +=1
print('循环结束')

输出结果为

2
4
6
8
10
循环结束

不做过多解释

****2:for 的简单使用

for i in 'python':
    print(i)

输出结果为:

p
y
t
h
o
n

for后接的一个变量,把可迭(dié)代对象(字符串,元祖,列表,字典)里的元素依次赋给对象
for的循环和迭代对象长度有关

3:for的使用要求
代码1

for i in 1234:
    print(i)

1234为整数不满足可迭代对象的条件
运行报错

代码2:

for i in 12.34:
    print(i)

12.34为浮点数,不满足可迭对象的条件
运行报错

!!!若要判断一类内容是否为 可迭代对象,可以使用
!!!dir函数查询

代码3:
dir查询对象方法的属性

print(dir(1234))

输出结果为:(即1234的可使用的方法):
[‘abs’, ‘add’, ‘and’, ‘bool’, ‘ceil’, ‘class’, ‘delattr’, ‘dir’, ‘divmod’, ‘doc’, ‘eq’, ‘float’, ‘floor’, ‘floordiv’, ‘format’, ‘ge’, ‘getattribute’, ‘getnewargs’, ‘gt’, ‘hash’, ‘index’, ‘init’, ‘init_subclass’, ‘int’, ‘invert’, ‘le’, ‘lshift’, ‘lt’, ‘mod’, ‘mul’, ‘ne’, ‘neg’, ‘new’, ‘or’, ‘pos’, ‘pow’, ‘radd’, ‘rand’, ‘rdivmod’, ‘reduce’, ‘reduce_ex’, ‘repr’, ‘rfloordiv’, ‘rlshift’, ‘rmod’, ‘rmul’, ‘ror’, ‘round’, ‘rpow’, ‘rrshift’, ‘rshift’, ‘rsub’, ‘rtruediv’, ‘rxor’, ‘setattr’, ‘sizeof’, ‘str’, ‘sub’, ‘subclasshook’, ‘truediv’, ‘trunc’, ‘xor’, ‘bit_length’, ‘conjugate’, ‘denominator’, ‘from_bytes’, ‘imag’, ‘numerator’, ‘real’, ‘to_bytes’]
可迭代对象的方法为:iter显然是没有的

代码4:dir的查询

print(dir('1234'))

输出结果为:(即‘1234’可以使用的方法)
[‘add’, ‘class’, ‘contains’, ‘delattr’, ‘dir’, ‘doc’, ‘eq’, ‘format’, ‘ge’, ‘getattribute’, ‘getitem’, ‘getnewargs’, ‘gt’, ‘hash’, ‘init’, ‘init_subclass’,
iter’,
le’, ‘len’, ‘lt’, ‘mod’, ‘mul’, ‘ne’, ‘new’, ‘reduce’, ‘reduce_ex’, ‘repr’, ‘rmod’, ‘rmul’, ‘setattr’, ‘sizeof’, ‘str’, ‘subclasshook’, ‘capitalize’, ‘casefold’, ‘center’, ‘count’, ‘encode’, ‘endswith’, ‘expandtabs’, ‘find’, ‘format’, ‘format_map’, ‘index’, ‘isalnum’, ‘isalpha’, ‘isdecimal’, ‘isdigit’, ‘isidentifier’, ‘islower’, ‘isnumeric’, ‘isprintable’, ‘isspace’, ‘istitle’, ‘isupper’, ‘join’, ‘ljust’, ‘lower’, ‘lstrip’, ‘maketrans’, ‘partition’, ‘replace’, ‘rfind’, ‘rindex’, ‘rjust’, ‘rpartition’, ‘rsplit’, ‘rstrip’, ‘split’, ‘splitlines’, ‘startswith’, ‘strip’, ‘swapcase’, ‘title’, ‘translate’, ‘upper’, ‘zfill’]

而在这里我们就能找到iter,也就是说可以字符串类型可以作为可迭代对象。

3:range的使用
代码1:

for i in range(0,10):   
    print(i)

输出结果为:

0
1
2
3
4
5
6
7
8
9

通过range我们可以方便的使用数字!
再看一下输出的结果和指令,我们不难推断出range输出数字满足左输右不输的法则,
也就是数学上常说的左闭右开。

代码2:range的步增(step)

for i in range(0,112):
    if i % 2 ==0:
        print(i)

则输出结果为:

0
2
4
6
8
10

在range中前两位表示首位,最后一位表示中间的递进关系,通常默认为1
当我们修改为2,for作循环的每一步就会增加2

代码3:尝试做出下列代码的运算结果(巩固练习)

for i in range(1,12):
    if i % 2==0 or i %3==0:
        continue
    else:
        print(i)

分析:如果取余2或者取余3为0,则跳出循环,不再执行其他指令,返回开头,
也就意味着,在(1,10)(左闭右开)除去2和3整倍数字
所以输出结果:

1
5
7
11

代码4:尝试做出下列代码的运算结果(巩固练习)

for i in range(1,12):
    if i % 2==0 or i %3==0:
        continue
    elif i % 4 ==0:
        break
    else:
        print(i)

分析:在(1,12)(左闭右开)
当取余2或者取余3为0是时,跳出循环回到开头,
而elif取余4为0,其实是多余的条件,因为取余4为0,那么取余2必为0,所以在刚开始,也就是elif之前就跳出了循环,所以没有值满足elif的条件。
运行结果:

1
5
7
11

4:列表推导式
我们来看下面一个代码

for i in range (1,10):
    if i % 2==0:
        print(i)

这个代码很简单
输出结果为

2
4
6
8

如果我们修改这个代码
修改为:

for i in range (1,10):
    if i % 2==0:
       a = print(i)
print(a)

则输出结果为:

2
4
6
8
None

显然是不一致的,print只是单纯的输出函数,是不能去接收的,如果我们想接收些数字,只需要将这些数字放入一个容器中,然后print这个容器即可,这里我们通常创建一个列表。

li=[]
for i in range (1,10):
    if i % 2==0:
       li.append(i)
print(li)

列表的创建必须用中括号
append的意思将值添加到列表中(后面会讲到),
输出的结果当然也要以列表的形式,即:

[2, 4, 6, 8]

!!!
!!!
!!!!
列表的推导式
其实就是上一个代码的简化
将for循环直接放入列表

li=[i for i in range (1,10) if i %2==0]
print(li)

我们观察到在for循环之前还有一个i,这个i不可缺少,这是后面for循环得到结果保存的位置
输出结果为

[2, 4, 6, 8]

列表推导式与三目运算的结合:
!!!

回忆三目运算:

a='晴天'
print('我们去打球吧') if a=='晴天' else print('那就不去了')

输出结果为:

我们去打球吧

结合范例:

print([i if i %2==0 else '*' for i in range (0,10)])

三目运算要放在列表式的前面(语法规则)
里面是一个列表,外边是一个print函数。
最开始的i还是最后得到的i保存位置
翻译下来就是,在(1,10)(左闭右开)如果i取余2为0,输出原数,否则输出*
输出结果:

[0, '*', 2, '*', 4, '*', 6, '*', 8, '*']
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值