09 Python 高级特性1(切片、迭代、列表生成式)

1 切片

对于取指定索引范围的数,用循环麻烦,Python提供了切片(Slice)操作来简化操作。

# 定义一个List
>>> arr=['zhangsan','lisi','wanger']
>>> arr
['zhangsan', 'lisi', 'wanger']
# 访问arr前两个元素
>>> arr[0:2]
['zhangsan', 'lisi']
# 0可以省略
>>> arr[:2]
['zhangsan', 'lisi']
# 获取最后一个元素
>>> arr[-1:]
['wanger']
# 获取倒数两个元素
>>> arr[-2:]
['lisi', 'wanger']

# 创建一个List
>>> ll=list(range(50))
>>> ll
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49]
# [0,12)范围内,每两个取一个数
>>> ll[:12:2]
[0, 2, 4, 6, 8, 10]
# 所有数中,每6个取一个数
>>> ll[::6]
[0, 6, 12, 18, 24, 30, 36, 42, 48]

tuple和字符串也可以使用切片操作。

2 迭代

如果给定一个list或tuple,可以通过for循环来遍历,这种遍历称为迭代(Iteration)。

# 创建一个dict
>>> grade_map={'lisi':99,'zhangsan':94,'wanger':100}
>>> grade_map
{'lisi': 99, 'zhangsan': 94, 'wanger': 100}
# 迭代操作,迭代 key
>>> for key in grade_map:
...     print(key)
...
lisi
zhangsan
wanger
# 迭代操作,迭代 value
>>> for value in grade_map.values():
...     print(value)
...
99
94
100
# 迭代 key&value
>>> for k,v in grade_map.items():
...     print(k,':',v)
...
lisi : 99
zhangsan : 94
wanger : 100

1)如何判断一个对象是否是可迭代的?

# 使用 collections模块的Iterable类型判断:
>>> from collections import Iterable

>>> isinstance(grade_map,Iterable)
True
>>> isinstance('hello',Iterable)
True
>>> isinstance(123,Iterable)
False

2)对list实现类似Java那样的下标循环

# 使用内置的enumerate函数,把一个list变成索引-元素对
>>> for i,value in enumerate(['a','b','c']):
...     print(i,value)
...
0 a
1 b
2 c

3)在for循环中,同时引用两个变量

>>> for x,y in [(1,1),(2,4),(2,7)]:
...     print(x,y)
...
1 1
2 4
2 7

3 列表生成式

即 List Comprehensions,是Python内置的非常简单却强大的用来创建list的生成式。

# 生成list
>>> list(range(1,11))
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# 列表生成式,生成[1,11)范围内偶数的平方的列表
>>> [x*x for x in range(1,11) if x%2 == 0]
[4, 16, 36, 64, 100]

# 使用两层循环
>>> [m + n for m in 'abc' for n in 'xyz']
['ax', 'ay', 'az', 'bx', 'by', 'bz', 'cx', 'cy', 'cz']

# 使用列表生成式输出grade_map的key-value对
>>> [k+'='+str(v) for k,v in grade_map.items()]
['lisi=99', 'zhangsan=94', 'wanger=100']
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值