Python学习记录day2

发布时间:2019-08-10 08:23:50编辑:auto阅读(1597)

    今天,跟着Alex喝了心灵的鸡汤:Be a new gentlmen

    • 着装得体

    • 每天洗澡

    • 适当用香水

    • 女士优先

    • 不随地吐痰、不乱扔垃圾、不在人群中抽烟

    • 不大声喧哗

    • 不插队、碰到别人要说抱歉

    • 不在地铁上吃东西

    • 尊重别人的职业和劳动

    • 尊重别人隐私,不随便打听别人工资

    • 与人保持安全距离(1米)

    • 多去旅行,一年至少一个国家

    • 多看书,电影,一年15本书,50+部电影

    • 学好英语

    • 保持不甘心、保持正能量

    • 做事件一定要学会换位思考,要想此事会不会给别人造成不好的困扰

    • 积极影响身边的人

    推荐读书

    • 《三体》

    • 《百年孤独》

    常量:用全部大写字母命名变量名

    引入模块:

    import os  #推荐一行一个

    安装模块:

    pip install pandas

    os模块执行系统命令:

    os.system("df")
    os.popen("ifconfig").read()

    .pyc是什么?

    Python是一门基于虚拟机的语言,pyc 是由py文件经过编译后二进制文件,py文件变成pyc文件后,加载的速度有所提高,而且pyc是一种跨平台的字节码,是由python 的虚 拟机来执行的。

    数据类型

    1.数字

    int(整型)

    32位系统:-2**31-1~2**31-1

    64位系统:-2**63-1~2**63-1

    type()函数用于输出数据类型

    long(长整型)

    float(浮点型)

    2.布尔值

    真或假

    1或0

    3.字符串

    推荐使用格式化输出:

    Y = "test"
    str  = "This is a %s" %Y
    print (str)

    PS:字符串是%s;整数是%d;浮点数是%f

    +号拼接字符串,效率低,因为其使用了多块内存空间。

    字符串

    字符串常用功能

    • 移除空白

    • 分割

    • 索引

    • 切片

    • 长度

    字符串操作

    删除空格

    >>> name="abc  "
    >>> name=name.strip()
    >>> name
    'abc'

    分割字符串

    >>> user="jim|jack"
    >>> print(user.split("|"))
    ['jim', 'jack']

    判断是否有空格

    >>> name="jim jack"
    >>> print(' ' in name)
    True

    首字母大写

    >>> print(name.capitalize())
    Jim jack

    格式化输出字符串

    >>> msg = "Hello, {name}, I am fine"
    >>> msg.format(name="Jimme")
    'Hello, Jimme, I am fine'
    >>> msg2="hahaha{0}, dddd{1}"
    >>> print(msg2.format('Ini',33))
    hahahaIni, dddd33

    切片

    >>> name="This is a test1,and what's your name"
    >>> print(name[2:7])
    is is

    查找

    >>> print(name.find('test'))
    10
    >>> print(name.find('tTTTT'))
    -1

    按长度填充字符串

    >>> print(name.center(40,'x')
    ... )
    xxThis is a test1,and what's your namexx

    字符串是否为数字

    >>> age="27"
    >>> print(age.isdigit())
    True

    字符串是否包含数字、开头、结局是否包含字符

    >>> name = "test01"
    >>> print(name.isalnum())
    True
    >>> print(name.endswith("df"))
    False
    >>> print(name.startswith("df"))
    False



    字符串大小写转换

    >>> print(name.upper(),name.lower())
    TEST01 test01

    列表

    列表基本操作:

    • 索引

    • 切片

    • 追加

    • 删除

    • 长度

    • 切片

    • 循环

    • 包含

    切片:取多个元素  

    >>> name = ["abc","jack",1,2,3,4]
    >>> name[-3:-1]
    [2, 3]
    >>> name[-3:0]
    []
    >>> name[-3:]
    [2, 3, 4]
    >>> name[:1]
    ['abc']
    >>> name[:2]
    ['abc', 'jack']

    切片后再切片

    >>> name[:2][:1][0]
    'abc'
    >>> name[:2][:1][0][1]
    'b'

    修改列表元素

    >>> name[3]="xiaoming"
    >>> name
    ['abc', 'jack', 1, 'xiaoming', 3, 4]

    插入

    >>> name.insert(2,"wangou")
    >>> name
    ['abc', 'jack', 'wangou', 1, 'xiaoming', 3, 4]

    追加

    >>> name.append("mac")
    >>> name
    ['abc', 'jack', 'wangou', 1, 'xiaoming', 3, 4, 'mac']

    删除

    >>> name.remove(3)
    >>> name
    ['abc', 'jack', 'wangou', 1, 'xiaoming', 4, 'mac']

    删除是只删除一个

    >>> name.append("mac")
    >>> name
    ['abc', 'jack', 'wangou', 1, 'xiaoming', 4, 'mac', 'mac']
    >> name.remove("mac")
    >>> name
    ['abc', 'jack', 'wangou', 1, 'xiaoming', 4, 'mac']
    >>> print(name[::2])
    ['abc', 'wangou', 'xiaoming', 'mac']

    元素是否在列表中,查找元素个数,查找元素位置

    >>> name
    ['abc', 'jack', 'wangou', 1, 'xiaoming', 4, 'mac']
    >>> print(1 in name)
    True
    >>> print(name.count(4))
    1
    >>> print(name.index(4))
    5

    扩展(合并列表)

    >>> name2=["zhangzi","lizi","wangba"]
    >>> name.extend(name2)
    >>> print(name)
    ['abc', 'jack', 'wangou', 1, 'xiaoming', 4, 'mac', 'zhangzi', 'lizi', 'wangba']

    反序排列元素

    >>> name.reverse()
    >>> print(name)
    ['wangba', 'lizi', 'zhangzi', 'mac', 4, 'xiaoming', 1, 'wangou', 'jack', 'abc']

    元素排序(版本3不支持字符与数字排序)

    >>> name.sort()
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: unorderable types: int() < str()
    >>> name
    ['lizi', 'mac', 'wangba', 'zhangzi', 4, 'xiaoming', 1, 'wangou', 'jack', 'abc']
    >>> name=[1,3,2,4]
    >>> name.sort()
    >>> print(name)
    [1, 2, 3, 4]

    移除元素(默认移除最后一个元素)

    >>> name.pop()
    4
    >>> print(name)
    [1, 2, 3]

    移除指定元素

    >>> name.pop(1)
    2
    >>> print(name)
    [1, 3]

    拷贝

    >>> name3 = name.copy()
    >>> print(name3)
    [1, 3]

    拷贝时,第一层的元素(非列表)不会改变,元素为列表时与变量赋值一样,内存地址不变,所以2个列表内,元素为列表内的元素变化时,2个列表也一起改变

    >>> name=[1,2,3,[1,2,3,4],4]
    >>> name2 = name.copy()
    >>> name2
    [1, 2, 3, [1, 2, 3, 4], 4]
    >>> name[3][2]="TTT"
    >>> name
    [1, 2, 3, [1, 2, 'TTT', 4], 4]
    >>> name2
    [1, 2, 3, [1, 2, 'TTT', 4], 4]
    >>> name[2]="AAA"
    >>> name
    [1, 2, 'AAA', [1, 2, 'TTT', 4], 4]
    >>> name2
    [1, 2, 3, [1, 2, 'TTT', 4], 4]

    删除列表

    >>> del name2
    >>> name2
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    NameError: name 'name2' is not defined

    元组:不能被修改

    基本操作:

    • 索引

    • 切片

    • 循环

    • 长度

    • 包含

    >>> r=(1,2,3,4,5)
    >>> r
    (1, 2, 3, 4, 5)
    >>> type(r)
    <class 'tuple'>
    >>> r[2]=1
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: 'tuple' object does not support item assignment

    数据运算符

    和其它语言一样,python也支持进行各种各样的数学和逻辑运算,我们一起来看一些。

    python语言支持以下几种运算

    算术运算

    比较运算

    Assignment Operators

    二进制运算

    关系运算

    验证运算

     

    算术运算

    运算符

    描述

    示例

    +

    加法运算

    a + b 得 30

    -

    减法运算

    a - b 得 -10

    *

    乘法运算

    a * b 得 200

    /

    除法运算

    b / a 得 2

    %

    取模 - 将%号左边的值除以%号右边的值并且将得到的结果的余数返回

    10%5得0 ,10%3 得1, 20%7 得6

    **

    幂 - 返回x的y次幂,就是返回多少次方

    2**8 得256

    //

    取整除 - 返回x除以y的商的整数部分

    9//2得4 , 9.0//2.0得4.0

     

     

     

     

     

     

     

     

     

     

     

     






    比较运算

    运算符

    描述

    示例

    ==

    判断两个对象是否相等

    (a == b) is not true.

    !=

    判断两个对象是否不相等

    (a != b) is true.

    <> 

    判断两个对象是否不相等

    (a <> b) is true. 与 != 运算符一样.

    大于 - 返回a是否大于b

    (a > b) is not true.

    小于 - 返回a是否小于b

    (a < b) is true.

    >=

    大于等于 - 返回a 是否大于等于b

    (a >= b) is not true.

    <=

    小于等于 - 返回a 是否小于等于b

    (a <= b) is true.

     

     

     

     

     

     

     

     

     

     

     

     






    赋值运算 

    运算符

    描述

    示例

    =

    赋值 - 将右边的值赋值给左边的变量名

    c = a + b 将会把a+b的结果赋值给c

    +=

    自加赋值 - 将+=号左边的值与+=号右边的值相加,然后再把结果赋值给+=号左右的值

    c += a相当于 c = c + a

    -=

    自减赋值

    c -= a相当于 c = c - a

    *=

    自乘赋值

    c *= a 相当于 c = c * a

    /=

    自除赋值

    c /= a 相当于 c = c / a

    %=

    自取模赋值

    c %= a 相当于 c = c % a

    **=

    自求幂赋值

    c **= a 相当于 c = c ** a

    //=

    自取整赋值

    c //= a 相当于 c = c // a

     

    按位运算(二进制运算)

    二进制位数

    8

    7

    6

    5

    4

    3

    2

    1

    每位所代表的数字

    128

    64

    32

    16

    8

    4

    2

    1

    60

    0

    0

    1

    1

    1

    1

    0

    0

    13

    0

    0

    0

    0

    1

    1

    0

    1

     

    2个10进制数字的位运算

    运算符

    描述

    示例

    &

    与运算,这个二进制位必须在2组数中都为真,结果才返回真

    (a & b)得12,二进制位: 0000 1100

    |

    或运算,这个二进制位只需在其中一组数据中为真即返回真

    (a | b)得 61,二进制位: 0011 1101

    ^

    异或运算,只要这个二进制位在两组数据中不相同就返回真

    (a ^ b)得 49 ,二进制位: 0011 0001

    << 

    左移运算,将a整体向左移2位

    a << 2得240,二进制位: 1111 0000

    >> 

    右移运算,将a整体向左移3位

    a >> 3得 7 ,二进制位: 0000 0111

     

    看下面的运算过程:

    二进制位

    8

    7

    6

    5

    4

    3

    2

    1

    结果

    每位所代表的数字

    128

    64

    32

    16

    8

    4

    2

    1


    60

    0

    0

    1

    1

    1

    1

    0

    0


    13

    0

    0

    0

    0

    1

    1

    0

    1


    &与运算

    0

    0

    0

    0

    1

    1

    0

    0

    12

    |或运算

    0

    0

    1

    1

    1

    1

    0

    1

    61

    ^异或运算

    0

    0

    1

    1

    0

    0

    0

    1

    49

    a<<2

    1

    1

    1

    1

    0

    0

    0

    0

    240

    a>>3

    0

    0

    0

    0

    0

    1

    1

    1

    7

    逻辑运算符 and or not

    关系运算符 in not in

    验证运算符 is  is not


    字典

    id_db = {
        42342323232: {
            'name': "Yangkun",
            'age': 23,
            'addr': 'Dongbei'
        },
        23232424224: {
            'name': 'Guojin',
            'age': 22,
            'addr': 'Hubei'
        }
    }

    字典的特性:

    • dict是无序的

    • key必须是唯一的,so 天生去重

    增加

    >>> id_db[322323232332]={
    ...     'name':'Guojia',
    ...     'age':45,
    ...     'addr':'Changan'
    ... }
    >>>
    >>> print(id_db)
    {42342323232: {'addr': 'Dongbei', 'age': 23, 'name': 'Yangkun'}, 23232424224: {'addr': 'Hubei', 'age': 22, 'name': 'Guojin'}, 322323232332: {'addr': 'Changan', 'age': 45, 'name': 'Guojia'}}

    修改

    >>> id_db[23232424224]['age']=32
    >>> print(id_db)
    {42342323232: {'addr': 'Dongbei', 'age': 23, 'name': 'Yangkun'}, 23232424224: {'addr': 'Hubei', 'age': 32, 'name': 'Guojin'}, 322323232332: {'addr': 'Changan', 'age': 45, 'name': 'Guojia'}}

    删除

    >>> id_db[23232424224].pop("addr")
    'Hubei'
    >>> print(id_db)
    {42342323232: {'addr': 'Dongbei', 'age': 23, 'name': 'Yangkun'}, 23232424224: {'age': 32, 'name': 'Guojin'}, 322323232332: {'addr': 'Changan', 'age': 45, 'name': 'Guojia'}}


    返回指定键的值,如果值不在字典中返回默认值

    >>> tmp = id_db.get(23232424224)
    >>> print(tmp)
    {'age': 32, 'name': 'Guojin'}

    更新

    >>> dic2 = {
    ...     42342323232: {
    ...         'name': "Yangkun",
    ...         'age': 23,
    ...         'addr': 'Shangdong'
    ...     }
    ... }
    >>> id_db.update(dic2)
    >>> print(id_db)
    {42342323232: {'addr': 'Shangdong', 'age': 23, 'name': 'Yangkun'}, 23232424224: {'age': 32, 'name': 'Guojin'}, 322323232332: {'addr': 'Changan', 'age': 45, 'name': 'Guojia'}}

    返回元组对的列表

    >>> print(id_db.items())
    dict_items([(42342323232, {'addr': 'Shangdong', 'age': 23, 'name': 'Yangkun'}), (23232424224, {'age': 32, 'name': 'Guojin'}), (322323232332, {'addr': 'Changan', 'age': 45, 'name': 'Guojia'})])

    以列表返回字典中的所有值

    >>> print(id_db.values())
    dict_values([{'addr': 'Shangdong', 'age': 23, 'name': 'Yangkun'}, {'age': 32, 'name': 'Guojin'}, {'addr': 'Changan', 'age': 45, 'name': 'Guojia'}])

    以列表返回一个字典所有的键

    >>> print(id_db.keys())
    dict_keys([42342323232, 23232424224, 322323232332])

    key是否存在于字典中

    >>> 42342323232 in id_db
    True

    get()方法类似, 如果键不已经存在于字典中,将会添加键并将值设为默认值

    >>> id_db.setdefault(42342323232)
    {'addr': 'Shangdong', 'age': 23, 'name': 'Yangkun'}
    >>> print(id_db)
    {42342323232: {'addr': 'Shangdong', 'age': 23, 'name': 'Yangkun'}, 23232424224: {'age': 32, 'name': 'Guojin'}, 322323232332: {'addr': 'Changan', 'age': 45, 'name': 'Guojia'}, 4: None}

    用于创建一个新字典,以序列seq中元素做字典的键,value为字典所有键对应的初始值

    >>> print(dict.fromkeys([1,2,3,4,33,32],"TTTTEST"))
    {32: 'TTTTEST', 1: 'TTTTEST', 2: 'TTTTEST', 3: 'TTTTEST', 4: 'TTTTEST', 33: 'TTTTEST'}

    随机删除一个元素

    >>> print(id_db.popitem())
    (42342323232, {'addr': 'Shangdong', 'age': 23, 'name': 'Yangkun'})
    >>> print(id_db)
    {23232424224: {'age': 32, 'name': 'Guojin'}, 322323232332: {'addr': 'Changan', 'age': 45, 'name': 'Guojia'}, 4: None}

    循环字典(效率低,因为有一个dict to list的转换过程)

    >>> for k,v in id_db.items():
    ...     print(k,v)
    ...
    23232424224 {'age': 32, 'name': 'Guojin'}
    322323232332 {'addr': 'Changan', 'age': 45, 'name': 'Guojia'}
    4 None
    >>> for key in id_db:   #效率高
    ...     print(key,id_db[key])
    ...
    23232424224 {'age': 32, 'name': 'Guojin'}
    322323232332 {'addr': 'Changan', 'age': 45, 'name': 'Guojia'}
    4 None


关键字