10.Python(高级特性)

一.切片

1,取一个列表的前三个元素

L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack']
print(L[0:3])

 

L[0:3]表示,从索引0开始取,直到索引3为止,但不包括索引3。

如果第一个是索引0,还可以省略。L[:3]

2.倒数切片

 倒数第一个元素的索引是-1

3.例子

L = list(range(100))
print("前十个数",L[:10])
print("后十个数",L[-10:])
print("前11到20个数",L[10:20])
print("前十个数,每两个取一个",L[:10:2])
print("所有数,每5个取一个",L[::5])

4.tuple也是一种list,唯一区别的是tuple不可变。因此,tuple也可以用切片操作,只是操作的结果仍是tuple:

 5.字符串也可以看成一种list,每个元素就是一个字符。因此,字符串也可以用切片操作,只是操作结果仍是字符串:

 6.练习,利用切片操作,实现一个trim()函数,去除字符串首尾的空格,注意不要调用str的strip()方法:

第一种方法:

def trim(s):
    if s =='':
        return s
    else:
        while s!='' and s[0]==' ':
            s=s[1:]
        while s!='' and s[-1]==' ':
            s=s[:-1]
        return s
print(trim(" sss "))

第二种方法:使用递归

def trim(s):
    if s == '':
        return s
    elif s[0] == ' ':
        return trim(s[1:])
    elif s[-1] == ' ':
        return trim(s[:-1])
    else:
        return s

print(trim(" sss "))

二、迭代

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

可以看出,Python的for循环抽象程度要高于C的for循环,因为Python的for循环不仅可以用在list或tuple上,还可以作用在其他可迭代对象上。

2、list这种数据类型虽然有下标,但很多其他数据类型是没有下标的,但是,只要是可迭代对象,无论有无下标,都可以迭代,比如dict就可以迭代:

因为dict的存储不是按照list的方式顺序排列,所以,迭代出的结果顺序很可能不一样。

默认情况下,dict迭代的是key。如果要迭代value,可以用for value in d.values(),如果要同时迭代key和value,可以用for k, v in d.items()

3.由于字符串也是可迭代对象,因此,也可以作用于for循环:

4、判断一个对象是都是可迭代对象,方法是通过collections模块的Iterable类型判断:

5、Python内置的enumerate函数可以把一个list变成索引-元素对,这样就可以在for循环中同时迭代索引和元素本身:

6、上面的for循环里,同时引用了两个变量,在Python里是很常见的,比如下面的代码:

7.使用迭代查找一个list中最小和最大值,并返回一个tuple

def findMinAndMax(L):
    max=L[0]
    min=L[0]
    for i in L:
        if i>max :
           max=i
        elif i<min:
           min=i
    return max, min
L=[1,2,3,5,8,9,0]
print(findMinAndMax(L))

三、列表生成器

1、列表生成器,要生成的元素放到前面,后面跟上for循环,就可以把list创建出来

要生成[1x1, 2x2, 3x3, ..., 10x10]

2、for循环后面还而已加上if判断,这样可以筛选出仅偶数的平方

  还可以使用两层循环

3、for循环其实可以同时使用两个甚至多个变量,比如dictitems()可以同时迭代key和value。因此,列表生成式也可以使用两个变量来生成list:

4、把一个list中所有的字符串变成小写

四、生成器

练习

def triangles():
    l = [1]
    while True:
        yield l
        l = [0]+l+[0]  #首尾加0,用于边界的计算
        l = [l[i]+l[i+1] for i in range(len(l)-1)]
        #l[i]+l[i+1] 前一个值和后一个值相加计算出下一个值
        #for i in range(len(l)-1) 循环获取生成的索引值
        #range(len(l)-1) 获得l的全部索引值,因为计算方式是当前值和后一个值相加,避免尾部越界所以要减一

n = 0
results = []
for t in triangles():
    results.append(t)
    n = n + 1
    if n == 10:
        break
for t in results:
print(t)
原文地址:https://www.cnblogs.com/zhaojiayu/p/13767706.html