零基础入门Python3-高级特性详解(1)

我们从字面意思理解高级特性,就是高级的特有的性质。(不是废话吗!)

高级特性,有切片、迭代、列表生成器、生成器、迭代器(我是从廖雪峰老师的博客抄袭来的,主要是我感觉廖老师总结的很到位!)

1、切片

切片是针对于 list 、tuple、str 进行操作,“切” 出来的是对应的类型,比如 list 的切片结果还是一个 list 。

[ list ] [ x : y ]        

( tuple ) [ x : y ]

' str ' [ x : y ]

# x 代表的是起始位置,y 代表的是终止位置,但是不包含y本身的那个元素

# 实例1

L1=[1,2,3,4,5,6]    #list的切片

L2=(1,2,3,4,5,6)    #tuple的切片

L3="123456"         #字符串的切片

print('list的切片:')    

print(L1[0:5])         

print('tuple的切片:')

print(L2[0:5])

print('str的切片:')

print(L3[0:5])

>>>             list的切片:    

                   [1, 2, 3, 4, 5]

                   tuple的切片:

                   (1, 2, 3, 4, 5)

                   str的切片:

                   12345

# 如果[0:5]切片的起始位置为0,那么就可以把0省略,表达成[:5]

print(L1[:5])

>>>     [1, 2, 3, 4, 5]

# 实例2,取特定位置的切片

L4=('a','b','c','d','e','f')

print(type(L4[1:5]),L4[1:5])

>>>    <class 'tuple'> ('b', 'c', 'd', 'e')

# 取L4 tuple的第一位到第五位的元素,但是不包含第五位的元素

# 实例2,这个实例很好的解释了特定区间的元素

a1=[i for i in range(21)]

print(a1[:])

print(a1[::2])

print(a1[1::2])

print(a1[:11:2])

print(a1[1:11:2])

>>>    

    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]

    [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20]

    [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]

    [0, 2, 4, 6, 8, 10]

    [1, 3, 5, 7, 9]

# [ : ] 中,没有给起始、和终止的位置,所以,python中默认取出所有的元素,也就相当于复制。

# [ : : 2] 第二个冒号代表的是隔2取值。

2、迭代

如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration)。(抄来的,廖雪峰的博客)

# 实例1,list 的迭代

S1=[1,2,3,4,5,6]

for i in S1:

    print(i,end=" ")

>>>    1 2 3 4 5 6 

# 实例2,tuple的迭代

S2=('a','b','c','d','e','f')

for j in S2:

    print(j,end=' ')

>>>    a b c d e f 

# 实例3,str的迭代

S3='Hello Python'

for k in S3:

    print(k,end=' ')

>>>    H e l l o   P y t h o n

# 实例4,dict 的迭代

S4={'a':1,'b':2,'c':3,'d':4,'e':5}

for m in S4:

    print(m ,end=' ')

>>>    a b c d e 

# 实例5,dict 键和值的迭代

S5={'a':1,'b':2,'c':3,'d':4,'e':5}

for a,b in S5.items():

    print(a,"=",b,end=" ")

>>>    a = 1 b = 2 c = 3 d = 4 e = 5 

# 如果要迭代出dict的键值,需要在变量后调用items()函数。

3、列表生成器

如果我们要生成一个列表,比如[0,1,2,3,4,5,6,7,8,9,10],可以使用list(range(11))

# 实例1

print(list(range(11)))

>>>    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

但是我们想要生成1x1,2x2,3x3,4x4......的一个列表,我们同样可以利用for 循环实现:

# 实例2

a1=[]

for i in range(11):

    a1.append(i*i)

print(a1)

>>>    [0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

你有没有感到繁琐?python为大家提供了一个列表生成器,直接一句话就可以生成列表,即便很复杂的列表也是可以的。

[i for i in range(11)]

>>>[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# 这个一个生成0-10列表的表达式。

# 首先 for i in range(11),生成0-10的数字

# 然后 赋值给 i 

#接着加入到列表中 [ ]

# 实例1,生成一个1x1,2x2,3x3,....的列表

a=[i*i for i in range(11)]

print(type(a),a)

>>>    <class 'list'> [0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

# 输出的类型是 list ,结果正确

# 实例2,输出0,10所有的偶数

print([j for j in range(11) if j % 2==0])

>>>    [0, 2, 4, 6, 8, 10]

# range 语句的右边是对range函数进行判断。符合判断语句的,输出,不符合的不输出。

# 实例3,输出0,10 所有的偶数,这些偶数中有 4 ,则输出4*4 的结果

print([j*j if j==4 else j for j in range(11) if j % 2==0])

>>>    [0, 2, 16, 6, 8, 10]

# for 语句的左边的 j*j if j==4 else j  代表的是,判断是否符合条件,如果符合,则执行判断语句的左边 j * j 。不符合,执行else 的右边 j 。

# 所以使用python的列表生成器,既能达到想要的结果,又方便快捷。

# 练习题,把列表L = ['Hello', 'World', 18, 'Apple', None] 中的字符串改为小写。

L = ['Hello', 'World', 18, 'Apple', None]

print([i.lower() if isinstance(i,str) else i for i in L])

>>>    ['hello', 'world', 18, 'apple', None]

# Python lower() 方法转换字符串中所有大写字符为小写。

 

关注公众号,了解更多!

猜你喜欢

转载自www.cnblogs.com/pyshadow/p/10400321.html