python 语言基础二

四、列表
    定义 : 一个打了激素的数组(数组只能用来存多个同种类型的数据, 但是列表可以存储多个任意类型的数据)
        列表的底层是以 栈 的方式生成的。


    列表的方法 : 
        
    1. 添加元素 : 
        a = []
        print(a)        输出 : []
            append()        :  添加一个元素
        a.append('xxx')
        print(a)        输出 : ['xxx']
        print(a.append('yyy'))        输出 : None
            extend()        :  添加多个元素(必须把要添加的多个元素 放到一个列表中)
        a.extend(['www', 'qqq'])
        print(a)        输出 : ['xxx', 'www', 'qqq']
            insert()        :    在某位在插入一个元素
        a.insert(2, '小明')                a.insert(插入的位置, 插入的值)
        print(a)        输出 : ['xxx', 'www', '小明', 'qqq']

    2. 删除元素
        a = ['hello', '好污哇有', 'hehe']
        print(a)                ['hello', '好污哇有', 'hehe']
            remove()        :    移除某个元素【如果该元素不存在则报错(ValueError: list.remove(x): x not in list)】
        a.remove('好污哇有')
        print(a)                ['hello', 'hehe']
            del()            :    删除某个下标对应的元素(这个被删除的元素的引用计数减一),也可以删除列表
        del(a[2])                
        print(a)                ['hello', '好污哇有']
        del(a)
        print(a)                NameError: name 'a' is not defined (a被删除了导致异常)
            pop()                弹出一个元素(从列表里面剔除, 返回值为被剔除的元素),可以指定弹出哪个下标对应的元素,
                                    如果指定的下标不存在则报异常(IndexError: pop index out of range),默认弹出下标最大的元素
        b = a.pop(1)
        print(b)                好污哇有
        print(a)                ['hello', 'hehe']

        print(a.pop())            hehe


    3. 列表切片    a[start:end:步长]
        利用索引,我们可以从列表中每次获取一个元素, 但是如果我们要从列表一次获取多个元素呢?
        此时我们可以使用分片, 分片的结果会得到原列表的一个【拷贝】(不是贴一个标签!!)
            a = [0, 1, 2, 3, 4, 5, 6]
            print(a[1:-1])            [1, 2, 3, 4, 5]        获取第二个元素到倒数第二个元素这段元素
            b = a[1:4:2]
            print(b)                [1, 3]
            print(a)                [0, 1, 2, 3, 4, 5, 6]
            b[1] = 2
            print(b)                [1, 2]                        b已经被改变了
            print(a)                [0, 1, 2, 3, 4, 5, 6]        a没有被改变

    4. 列表的一些常用操作符
        a、比较操作符 ( >、 <、 == )        【当两个列表中有多个元素时, 默认从第 0 个元素开始比较, 只要有一个元素不相等, 就把这个结果作为列表比较的结果】
            list1 = [1, 2, 3, 4
            list2 = [2, 2, 3, 4]
            print(list1 < list2)        True
            print(list1 > list2)        False

        b、逻辑操作符    ( and、 or、 not)

        c、连接操作符    ( + )    只能连接两个列表, 如果不是列表, 比如添加是一个数字,就会报 TypeError: can only concatenate list (not "int") to list
            list1 = [1, 2, 3, 4]
            list2 = [2, 2, 3, 4]
            print(list1 + list2)    [1, 2, 3, 4, 2, 2, 3, 4]
            一般需要添加另一个列表里的元素时使用 extend() 方法, 而不是使用 + 这个连接操作符

        d、重复操作符    ( * )
            list1 = [1, 2, 3, 4]
            print(list1 * 2)    [1, 2, 3, 4, 1, 2, 3, 4]

        e、成员关系操作符    (in 、not in)        【判断是否在列表中】
            list1 = [1, 2, 3, 4]
            print(2 in list1)                True
            print(20 in list1)                False
            print([1, 2] in list1)            False

    5. 获取列表中的列表 (操作方式类似操作二维数组)

    6. 列表的小伙伴们(内置函数)
        print(dir(list))
        输出 : 
            ['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', 
            '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', 
            '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', 
            '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 
            'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']


        python 中的 . 表示范围, 比如 list.append()  表示这个 append 函数 是属于 list 的


        append : 添加一个元素

        extend :添加多个元素(多个元素放在一个列表中)

        insert : 在某位在插入一个元素

        clear : 清空列表

        pop : 从列表中弹出元素

        remove : 移除一个元素

        copy : 拷贝列表

        count : 统计某元素在列表中出现的次数
            list1 = [1, 5, 3]
            list1 *= 3
            print(list1)                [1, 5, 3, 1, 5, 3, 1, 5, 3]
            print(list1.count(1))        3

        index  : 获取某元素出现在列表时的下标(默认是以最小的下标为准, 可以指定查找 的下标的范围)
            list1 = [1, 5, 3]
            print(list1.index(5))            1

            list1 *= 3
            print(list1.index(5))            1
            print(list1)                    [1, 5, 3, 1, 5, 3, 1, 5, 3]
            print(list1.index(5, 3, 6))        4

        reverse : 将列表翻转    (首位顺序互换)        【重要】
            list1 = [1, 5, 3]
            print(list1)                    [1, 5, 3]

            list1.reverse()
            print(list1)                    [3, 5, 1]

        sort :      将列表按从小到大排序                    【非常非常重要】
            list1 = [1, 5, 3]
            print(list1)                    [1, 5, 3]    (排序前)
            list1.sort()
            print(list1)                    [1, 3, 5]  (排序后)

            如果我要从大到小排呢?
            方法一:
                第一步. 调用 sort 排序 
                第二步.调用 reverse 翻转
            方法二:
                sort 方法有三个参数,  list1.sort(func, key|, reverse)
                其中 reverse 默认为 False ,表示从小到大排列, 设置为 True 就会从大到小排列了。
                list1 = [1, 5, 3]
                list1.sort(reverse=True)
                print(list1)                [5, 3, 1]


--------------------------------------------------------

五、元组 tuple

    由于列表太过灵活, 元素可以顺便修改, 现在我们想要一个元素不可变的(列表),这就是元组。
    元组的访问那些跟列表是一样的。如果我们 想要修改元组中的元素,就会报 TypeError: 'tuple' object does not support item assignment 异常
    列表的标志性符号是 [] 中括号, 那么元组呢?  我们的第一感觉认为是 () 小括号,  但是事实上是 , 逗号。如下

        tuple1 = (1, 2)
        print(type(tuple1))                <class 'tuple'>

        tuple2 = 2,
        print(type(tuple2))                <class 'tuple'>

        tuple3 = (3)
        print(type(tuple3))                <class 'int'>

----------------------------------------------------------

六、字符串

    1.各种内置函数 
        print(dir(str)) 
        输出如下 : 

            ['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', 
            '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', 
            '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', 
            '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 
            'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 
            'index', 'isalnum', 'isalpha', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 
            'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 
            'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 
            'title', 'translate', 'upper', 'zfill']

            capitalize : 将首字母大写
                print('hello word'.capitalize())                Hello word

            casefold :   将字符串全部转换为小写
                print('HEllo WoRd'.casefold())                    hello word

            lower :   将字符串全部转换为小写
                print('HEllo WoRd'.casefold())                    hello word

            center :       将字符串的长度填充为 n(原字符串居中)    str.center(目标长度(小于原长度则什么都不做) ,用于填充的符号(只能为一个字符))
                print('HEllo WoRd'.center(50,'~'))                ~~~~~~~~~~~~~~~~~~~~HEllo WoRd~~~~~~~~~~~~~~~~~~~~

            ljust :       将字符串的长度填充为 n(左对齐)    str.ljust(目标长度(小于原长度则什么都不做) ,用于填充的符号(只能为一个字符))
                print('HEllo WoRd'.ljust(50,'~'))                HEllo WoRd~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

            rjust :       将字符串的长度填充为 n(右对齐)    str.rjust(目标长度(小于原长度则什么都不做) ,用于填充的符号(只能为一个字符))
                print('HEllo WoRd'.rjust(50,'~'))                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~HEllo WoRd


            count  :       统计某字符串出现的次数
                print('HEllo WoRd'.count('ll'))                    1

            encode  :       字符串编码格式转换
                print('HEllo WoRd'.encode('utf-8'))                b'HEllo WoRd'

            【endswith】  :         判断字符串是否以某字符结尾
                print('HEllo WoRd'.endswith('sd'))                False
                print('HEllo WoRd'.endswith('Rd'))                True
                print('HEllo WoRd'.endswith('d'))                True

            【startswith】  :         判断字符串是否以某字符开头
                print('HEllo WoRd'.startswith('sd'))                False
                print('HEllo WoRd'.startswith('H'))                    True
                print('HEllo WoRd'.startswith('HE'))                True

            expandtabs  :         把字符串中的 tab 符号('\t')转为空格,tab 符号('\t')默认的空格数是 8。
                print('HEllo\tWo\tRd')                            HEllo    Wo    Rd
                print('HEllo\tWo\tRd'.expandtabs())                HEllo   Wo      Rd

            【find】           :         查找某字符串在某区间内出现的下标 (默认区间为整个原字符串),没找到返回 -1
                print('HEllo WoRd'.find('o', 5, 8))                7

            index         :         查找某字符串在某区间内出现的下标 (默认区间为整个原字符串),没找到抛异常  ValueError: substring not found


            isalnum     :         检查字符串是否仅仅由字母和数字组成(可以只包含其中一种)
                print('HElloW2oRd'.isalnum())                    True
                print('HEllo W2oRd'.isalnum())                    False
                print('HElloWoRd'.isalnum())                    True
                print('123'.isalnum())                            True

            isalpha        :         是否全字母
                print('HEllo WoRd'.isalpha())                    False
                print('HElloWoRd'.isalpha())                    True

            isdecimal        :         检查字符串是否只包含十进制字符。这种方法只存在于unicode对象。
                print('123 456'.isdecimal())                    False
                print('1234'.isdecimal())                    True
            

            isdigit        :         检查字符串是否是否全数字
                print('123 456'.isdigit())                    False
                print('1234'.isdigit())                    True
            
            islower        :         如果字符串中所有的字母都为小写(可以包含非字母),返回True,否则为False。
                print('Hello Word'.islower())                False
                print('hello word'.islower())                True
                print('hellowo2rd'.islower())                True
                print('helloword'.islower())                True
            
            istitle        :         检查字符串首字母是否为大写(每个空格隔开一个单词,检测一次)
                print('Hello Word'.istitle())                    True
                print('Hello word'.istitle())                    False
            
            isupper        :         检查字符串字母是否全部为大写(每个空格隔开一个单词,检测一次)
                print('Hello Word'.isupper())                    False
                print('HELLO WORD'.isupper())                    True
            
            lstrip        :         去掉字符串左边的空格。
                print('   HEllo WoRd'.lstrip())                HEllo WoRd
            
            strip        :         去掉字符串开头和结尾的空格。
                print('  HEllo WoRd     '.strip())                HEllo WoRd

            replace        :         replace(old,new,count),用new替换old,若使用count参数,则替换次数不超过count次。
                print('   HEllo WoRd'.replace(' ', '~', 3))            ~~~HEllo WoRd

            【split】        :         将字符串按某个字符分割,然后将得到的所有字符都放到列表中返回
                print('HEllo WoRd'.split())                            ['HEllo', 'WoRd']

            【splitlines】        :         将字符串按行('\n'回车符)分割,然后将得到的所有字符都放到列表中返回
                print('HEllo WoRd \n all body'.splitlines())        ['HEllo WoRd ', ' all body']

            swapcase        :         将字符串中的大写字符改为小写,小写字符改为大写。
                print('HEllo WoRd'.swapcase())                heLLO wOrD

            title        :         返回标题化的字符串(首字母大写,其他小写)。
                print('hEllo WoRd'.title())                    Hello Word


        2. 字符串格式化
            a、 format 内置函数
                用法一:只使用 "{}" 符号占位一个字符
                a = 'hello {}' .format('xiaoming')
                print(a)

                用法二:使用多个 "{}" 符号占位多个字符, 最后按照 format() 里面的顺序对字符进行格式化
                b = 'hello {} {}'.format('xaoming', 'xiaohong')
                print(b)

                用法三:使用 "{number}" 大括号包含下标的方式占位 , 最后按照 format() 里面的下标格式化到字符串里对应的下标去
                c = 'hello {0}、{1}、{3}、{2}'.format('张飞', '赵云', '马超', '关羽')
                    其中可以使用 :加条件对填充进来的值进行格式化, 如下, 四舍五入保留一位小数
                        print('{0:.1f}'.format(54.56))        54.6

                print(c)

                用法四:使用变量 赋值的方式进行占位, 字符串里面写 {变量} , format() 里面写 变量=值, 最终按照变量名将值格式化到字符串里面去
                d = "hello {zhangfei}、{zhaoyun}、{guanyu}".format(zhangfei='张飞',guanyu='关羽', zhaoyun='赵云')
                print(d)

                注意 : 
                e = "{{0}}".format('hehe')
                print(e)                如果有两层花括号,  那么就不会把 format 里面的值格式化进去。。。。。。

            b、百分号格式化符号 %

                格式符为真实值预留位置,并控制显示的格式。格式符可以包含有一个类型码,用以控制显示的类型,如下:

                %s    字符串 (采用str()的显示)
                            print('hehe %s' % '干啥呢')            
                %r    字符串 (采用repr()的显示)                hehe 干啥呢
                            print('hehe %r' % '干啥呢')        hehe '干啥呢'
                %c    单个字符
                            print('hehe %c' % '干')            hehe 干
                            print('hehe %c' % '干啥呢')        TypeError: %c requires int or char
                %b    二进制整数
                            print(b'hello %b' % b'xx')        b'hello xx'
                            print('hello %b' % b'xx')        ValueError: unsupported format character 'b' (0x62) at index 7
                %d    十进制整数
                        与 %i 相似
                %i    十进制整数
                    print('hehe %i' % 50)                    hehe 50
                    print('hehe %i' % 0x50)                    hehe 80     【十六进制转10机制展示】
                    print('hehe %i' % '??')                    TypeError: %i format: a number is required, not str
                %o    八进制整数

                %x    十六进制整数

                %e    指数 (基底写为e)

                %E    指数 (基底写为E)

                %f    浮点数

                %F    浮点数,与上相同

                %g    指数(e)或浮点数 (根据显示长度)

                %G    指数(E)或浮点数 (根据显示长度)

                 

                %%    字符"%"


            c、格式化操作符辅助指令


                *        定义【宽度或者小数点精度】

                -        用做左对齐

                +        在正数前面显示加号(+)

                #        在八进制数前面显示零(0),在十六进制前面显示"0x"或者"0X"(取决于用的是"x"还是"X")

                0        显示的数字前面填充"0"而不是默认的空格

                (var)    映射变量(通常用来处理字段类型的参数)

                m.n     【m 是显示的最小总宽度】,【n 是小数点后的位数】(如果可用的话)

            d、字符串转义字符

                \        (在行尾时)    续行符
                \\        反斜杠符号
                \'        单引号
                \"        双引号
                \a        响铃
                \b        退格(Backspace)
                \e        转义
                \000    空
                \n        换行
                \v        纵向制表符
                \t        横向制表符
                \r        回车
                \f        换页
                \oyy    八进制数,yy代表的字符,例如:\o12代表换行
                \xyy    十六进制数,yy代表的字符,例如:\x0a代表换行
                \other    其它的字符以普通格式输出

======================================================================================

七、 序列

    列表、元组、字符串的共同点:
        都可以通过索引得到每一个元素
        默认索引值总是从0开始
        可以通过切片的方法得到一个范围内的元素的集合
        有很多共同的操作符(重复操作符、拼接操作符、成员关系操作符)
    所以可以把他们统称为 【序列】

    关于序列常见的内置方法 :
        1. list()    :把一个可迭代对象转换为列表

print(help(list))
    输出 :
class list(object)
 |  list() -> new empty list                                 list本身作为一个方法,本身拥有两种形态,  无参数生成一个空的列表
 |  list(iterable) -> new list initialized from iterable's items     有参数(参数为一个迭代器):将迭代器中的元素全部取出来作为列表的成员

         2. tuple()     :  把一个可迭代对象转换为元组

         3. str()     : 把一个可迭代对象转换为字符串
            a = ['x', 'y', 'yu', 5]
            print(type(a))                <class 'list'>
            print(str(a))                ['x', 'y', 'yu', 5]
            print(type(str(a)))            <class 'str'>
            print(str(a)[0])            [

max()   方法: 求序列中的最大值        【系列中只能包含同种类型的数据才能进行比较】
min()   方法: 求序列中的最小值        【系列中只能包含同种类型的数据才能进行比较】

a = [1, 2, 9, 5, 0, 4]
print(max(a))            输出 9
print(min(a))            输出 0

a = 'zabcdefq'
print(max(a))            z
print(min(a))            a

a = [1, 2, 9, 5, 0, 4, 'x']
print(max(a))            TypeError: '<' not supported between instances of 'str' and 'int'

sum(iterable[,start=0])            返回序列器iterable 和可选参数start的总和【序列器只能包含 int 型数据】

a = [1, 5, 8, 9]
print(sum(a, 5))        1 + 5 + 8 + 9 + 5 = 28

sorted(iterable, reverse=False)                对序列进行排序, reverse 默认为 False, 表示从小到大排序
a = [1, 5, 8, 9]
print(sorted(a, reverse=True))                [9, 8, 5, 1]

reversed()                用于逆转一个序列, 返回值为 一个对象。。。可以配合 list 等方法使用
a = [1, 5, 8, 9]
print(reversed(a))                    <list_reverseiterator object at 0x0000024B92B3C278>
print(list(reversed(a)))            [9, 8, 5, 1]

enumerate()                枚举, 返回一个对象, 给序列中每一个元素分配一个下标,变成成对的元组
a = [1, 5, 8, 9]
print(enumerate(a))                        <enumerate object at 0x000001780685C678>
print(list(enumerate(a)))                [(0, 1), (1, 5), (2, 8), (3, 9)]


zip()                        打包, 回一个迭代器对象,将两个序列下标相同的元素取出组合成一个元组(长度以最短的序列为主)
a = [1, 5, 8, 9]
b = ('x', 'y', 'z')
print(zip(a, b))                        <zip object at 0x000001C1704758C8>
c = list(zip(a, b))
print(c)                                [(1, 'x'), (5, 'y'), (8, 'z')]
d = []
e = []
for d1, e1 in c:
    d.append(d1)
    e.append(e1)
    
print(d)                                [1, 5, 8]
print(e)                                ['x', 'y', 'z']

猜你喜欢

转载自blog.csdn.net/qq_26128879/article/details/82820278