#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# 学习网站:www.liaoxuefeng.com
#****************************************************
# Python3 高级特性-切片+迭代 *
#****************************************************
print ("--------------------分割线------------------")
#============
# 切片
#============
# 取一个list或tuple的部分元素
list_a = ['a','b','c','d','e','f','g']
# 取前3个元素,笨办法:
print( list_a[0], list_a[1], list_a[2] ) # a b c
# 取前N个元素,笨办法:
n = 5
for i in range(n):
print( list_a[i],end=' ' ) # a b c d e
print()
# 对这种经常取指定索引范围的操作,用循环十分繁琐,因此,python提供
# 了切片(slice)操作符,能大大简化这种操作。
# 取前3个元素
print( list_a[0:3] ) # ['a', 'b', 'c']
# 如果第一个元素索引是0,还可以省略,取前3个元素
print( list_a[:3] ) # ['a', 'b', 'c']
# 取倒数第一个元素的索引是-1
print( list_a[-1] ) # g
# 取倒数两个元素
print( list_a[-2:] ) # ['f', 'g']
# 取所有元素
print( list_a[:] ) # ['a', 'b', 'c', 'd', 'e', 'f', 'g']
# 前6个元素,每两个取一个
print( list_a[:6:2] ) # ['a', 'c', 'e']
# 所有元素,每三个取一个
print( list_a[::3] ) # ['a', 'd', 'g']
'''
tuple也是一种list,唯一区别是tuple不可变,tuple也可以用切片操作,操作
结果仍是tuple, 字符换也可以用切片,操作结果仍是字符串
'''
print ("--------------------分割线------------------")
#============
# 迭代
#============
'''
给定一个list或tuple,可以通过for循环来遍历这个list或tuple,这种遍历
称为迭代(iteration),python中迭代是通过for...in来完成的。
for...in循环不仅可以用在list或tuple上,还可以作用在其他可迭代对象上。
只要是可迭代对象,无论有无下标,都可以迭代,比如dict。
'''
dict_a = {'name':'bugliu','gender':'M','age':30}
# dict的存储不是按照list的方式顺序排列,所以,迭代出的结果顺序可能
# 不一样
# 默认情况下, dict迭代的key
for key in dict_a:
print( key, end=' ' ) # name gender age
print()
# 按dict中的value进行迭代
for value in dict_a.values():
print( value, end=' ' ) # bugliu M 30
print()
# 同时按key和value进行迭代
for key,value in dict_a.items():
print(key,value, end=' ') # name bugliu gender M age 30
print()
# 字符串迭代
for ch in 'bugliu':
print( ch, end=' ' ) # b u g l i u
print()
print ("--------------------分割线------------------")
# 判断一个对象是否为可迭代对象,通过collections模块的Iterable类型判断
from collections import Iterable
# 判断字符串是否可迭代
print( isinstance('abs', Iterable) ) # True
# 判断list是否可迭代
print( isinstance([1,2,3], Iterable) ) # True
# 判断tuple是否可迭代
print( isinstance((1,2,3), Iterable) ) # True
# 判断dict是否可迭代
print( isinstance({'age':30}, Iterable) ) # True
# 判断整数是否可迭代
print( isinstance(123, Iterable) ) # False
print ("--------------------分割线------------------")
# 对list实现下标循环,python内置的enumerate函数可以把一个list变成
# 索引-元素对,这样就可以在for循环中同时迭代索引和元素本身
for i, value in enumerate(['a','b','c']):
print( i, value, end=' ' ) # 0 a 1 b 2 c
print()