• 零基础入门学习Python(16)--序列!序列!


    前言

    你可能发现了,小甲鱼把这个列表,元组,字符串放在一起讲是有道理的,它们有许多共同点:

    • 都可以通过索引得到每一个元素
    • 默认索引值总是从0开始
    • 可以通过分片的方法得到一个范围内的元素的集合
    • 有很多共同的操作符(* 重复操作符、+ 拼接操作符、in not in成员关系操作符)

    我们把这三种类型统称为序列。

    知识点

    介绍下序列常见的BIF()

    • list(iterable) 把一个可迭代对象转换为列表

    所谓迭代,就是重复反馈过程的活动,其目的通常是为了接近并达到所需的目标或结果,每一次对过程的重复,被称之为一次迭代。而每一次迭代的结果,都会变成下一次迭代的初始值。
    所以呢,目前来说,迭代就是一个for循环。我们今后会介绍迭代器,那时迭代就不会仅仅是一个for了。

    >>> b = 'i love fishc.com'
    >>> b = list(b)
    >>> b
    ['i', ' ', 'l', 'o', 'v', 'e', ' ', 'f', 'i', 's', 'h', 'c', '.', 'c', 'o', 'm']
    b本来是一个字符串,然后通过list方法,把字符串迭代,变成一个列表,然后赋值给回b。
    
    >>> c = (1,1,2,3,5,8,13,21,34)
    >>> c = list(c)
    >>> c
    [1, 1, 2, 3, 5, 8, 13, 21, 34]
    c从元组变成了列表
    • tuple([iterable]) 把一个可迭代对象转换为元组
    >>> a = ['123',['a','b'],4,5,'c']
    >>> tuple(a)
    ('123', ['a', 'b'], 4, 5, 'c')
    • str(object) 把object对象转换为字符串
    >>> a = ['123',['a','b'],4,5,'c']
    >>> type(a)
    <class 'list'>
    
    >>> a = str(a)
    >>> a
    "['123', ['a', 'b'], 4, 5, 'c']"
    >>> type(a)
    <class 'str'>
    • len(sub) 返回sub的长度
    >>> a
    ['123', ['a', 'b'], 4, 5, 'c']
    >>> len(a)
    5
    
    >>> a = str(a)
    >>> a
    "['123', ['a', 'b'], 4, 5, 'c']"
    >>> len(a)
    30
    • max()返回序列或者参数集合中的最大值
    >>> numbers = [1,18,13,0,-98,34,54,76,32]
    >>> max(numbers)
    76
    • min()返回序列或者参数集合中的最小值
    >>> numbers = [1,18,13,0,-98,34,54,76,32]
    >>> min(numbers)
    -98
    
    >>> chars = '1234567890'
    >>> min(chars)
    '0'
    
    >>> tupe1 = (1,2,3,4,5,6,7,8,9,0)
    >>> max(tupe1)
    9
    >>> min(tupe1)
    0
    
    【注意】:使用max,min方法都要保证序列或者参数的数据类型都是一致的,否则会报错:
    >>> mix = ['a','c',1,32,'d']
    >>> max(mix)
    Traceback (most recent call last):
      File "<pyshell#32>", line 1, in <module>
        max(mix)
    TypeError: '>' not supported between instances of 'int' and 'str'
    • sum(iterable[,start=0]) 返回序列iterable和可选参数start的总和
    >>> tuple2 = (3.1,2.3,3.4)
    >>> sum(tuple2)
    8.8
    >>> numbers
    [1, 18, 13, 0, -98, 34, 54, 76, 32]
    >>> numbers.append('a')
    
    >>> sum(numbers)
    Traceback (most recent call last):
      File "<pyshell#70>", line 1, in <module>
        sum(numbers)
    TypeError: unsupported operand type(s) for +: 'int' and 'str'
    
    >>> numbers.pop()
    'a'
    
    >>> numbers
    [1, 18, 13, 0, -98, 34, 54, 76, 32]
    >>> sum(numbers)
    130
    >>> sum(numbers,8)
    138
    >>> 
    • sorted(iterable, key=None, reverse=False) 返回一个排序的列表,使用方法跟列表的内建函数(list.sort())一致,注意,这个sorted()后边有“ed”哦。
    >>> numbers
    [1, 18, 13, 0, -98, 34, 54, 76, 32]
    >>> sorted(numbers)
    [-98, 0, 1, 13, 18, 32, 34, 54, 76]
    • reversed(sequence)返回逆向迭代序列的值,一样道理,跟列表的内建函数(list.reverse())一致,注意,这个reversed()后边也多了个“d”哦。
    >>> numbers
    [1, 18, 13, 0, -98, 34, 54, 76, 32]
    
    >>> reversed(numbers)
    <list_reverseiterator object at 0x000000BE2F19E780>
    
    >>> list(reversed(numbers))
    [32, 76, 54, 34, -98, 0, 13, 18, 1]
    
    • enumerate(iterable) 生成由每个元素的index值和item值组成的元组
    >>> numbers
    [1, 18, 13, 0, -98, 34, 54, 76, 32]
    >>> enumerate(numbers)
    <enumerate object at 0x000000BE2F43DEE8>
    >>> list(enumerate(numbers))
    [(0, 1), (1, 18), (2, 13), (3, 0), (4, -98), (5, 34), (6, 54), (7, 76), (8, 32)]
    • zip(iter1 [,iter2 […]]) 返回由各个参数的序列组成的元组
    >>> a = [1,2,3,4,5,6,7,8]
    >>> b = [4,5,6,7,8]
    >>> zip(a,b)
    <zip object at 0x000000BE2F4193C8>
    >>> list(zip(a,b))
    [(1, 4), (2, 5), (3, 6), (4, 7), (5, 8)]

    课后习题

    测试题

    我们根据列表、元组和字符串的共同特点,把它们统称什么?

    序列

    请问分别使用什么BIF,可以把一个可迭代对象转换为列表、元组和字符串?

    list([iterable])  转换为列表
    tuple([iterable]) 转换为元组
    str(obj)   转换为字符串

    你还能复述出“迭代”的概念吗?

    所谓迭代,就是重复反馈过程的活动,其目的通常是为了接近并达到所需的目标或结果,
    每一次对过程的重复,被称之为一次`迭`。而每一次迭代的结果,都会变成下一次迭代的初始值。

    你认为调用max('I love FishC.com')会返回什么值?为什么?

    >>> max('I love FishC.com')
    'v'

    因为字符串在计算机中是以ASCII码的形式存储,参数中ASCII码值最大的是’v’ 对应118.

    图片内容

    name = input('请输入待查找的用户名:')
    score = [['迷途', 85], ['黑夜', 80], ['小布丁', 65], ['福禄娃娃', 95], ['怡静', 90]]
    IsFind = False
    
    for each in score:
        if name in each:
            print(name + '的得分是:', each[1])
            IsFind = True
            break
    
    if IsFind == False:
        print('查找的数据不存在!')
    
    

    动动手

    **猜想一下min()这个BIF的实现过程

    def min(x):
        least = x[0]
    
        for each in x:
            if each < least:
                least = each
    
        return least
    
    print(min('123456789'))

    视频中我们说sun()这个BIF有个缺陷,就是如果参数里有字符串类型的话,就会报错,请写出一个新的实现过程,自动”无视”参数里的字符串并返回正确的计算结果

    def sum(x):
        result = 0
    
        for each in x:
            if (type(each) == int ) or (type(each) == float):
                result += each
            else:
                continue
    
        return result
    
    print(sum([1,2.1,2.3,'a','1',True]))
    
  • 相关阅读:
    理解Python闭包,这应该是最好的例子
    2021-01-31
    论unity中UI工具与GUI函数
    2021-01-31
    第八届“图灵杯”NEUQ-ACM程序设计竞赛(全题解&&详细)
    第八届“图灵杯”NEUQ-ACM程序设计竞赛个人赛(同步赛)全题解
    Go-快速排序
    网络地址转换NAT原理及其作用
    解析私有IP地址和公网IP地址
    first blog
  • 原文地址:https://www.cnblogs.com/wanbin/p/9514695.html
Copyright © 2020-2023  润新知