美文网首页生信程序员Python全栈工程师
45、2-数值处理和类型判断

45、2-数值处理和类型判断

作者: BeautifulSoulpy | 来源:发表于2019-05-17 22:30 被阅读0次
    1.基本变量类型

    计算机程序要处理不同的数据,需要定义不同的数据类型。Python 定义了六种标准的数据类型,分布如下所示:

    Numbers(数字)
    Strings(字符串)
    List(列表)
    Tuple(元组)
    Set(集合)
    Dictionary(字典)

    1.1Numbers(数字)

    数字类型用于存储数值,它是不可改变的数据类型。Python 3 支持以下几种数字类型:

    int (整数)
    float (浮点型)
    complex(复数)
    bool (布尔)
    数字类型的使用很简单,也很直观,如下所示:

    # int
    q = 1
    # float
    w = 2.3
    # bool
    e = True
    # complex
    r = 1 + 3j
    print(q, w, e, r) # 1 2.3 True (1+3j)
    
    # 内置的 type() 函数可以用来查询变量所指的对象类型
    print(type(q))  # <class 'int'>
    print(type(w))  # <class 'float'>
    print(type(e))  # <class 'bool'>
    print(type(r))  # <class 'complex'>
    
    # 也可以采用 isinstance()
    # isinstance 和 type 的区别在于:type()不会认为子类是一种父类类型,isinstance()会认为子类是一种父类类型
    print(isinstance(q, int)) # True
    print(isinstance(q, float)) # False
    

    混合计算的时候, Python 会把整数转换为浮点数。

    1.2 Strings(字符串)

    注意:
    1、反斜杠可以用来转义,使用 r 可以让反斜杠不发生转义。
    2、字符串可以用 + 运算符连接在一起,用 * 运算符重复。
    3、Python 中的字符串有两种索引方式,从左往右以 0 开始,从右往左以 -1 开始。
    4、Python 中的字符串不能改变。


    字符串包含了很多内置函数,这里只介绍几种非常常见的函数:

    strip(x):当包含参数 x 表示删除句首或者句末 x 的部分,否则,就是删除句首和句末的空白字符,并且可以根据需要调用 lstrip() 和 rstrip() ,分别删除句首和句末的空白字符;
    split():同样可以包含参数,如果不包含参数就是将字符串变为单词形式,如果包含参数,就是根据参数来划分字符串;
    join():主要是将其他类型的集合根据一定规则变为字符串,比如列表;
    replace(x, y):采用字符串 y 代替 x
    index():查找指定字符串的起始位置
    startswith() / endswith():分别判断字符串是否以某个字符串为开始,或者结束;
    find():查找某个字符串;
    upper() / lower() / title():改变字符串的大小写的三个函数
    
    # strip()
    s3 = " I love python "
    s4 = "show something!"
    print('输出直接调用 strip() 后的字符串结果: ', s3.strip())
    print('lstrip() 删除左侧空白后的字符串结果: ', s3.lstrip())
    print('rstrip() 删除右侧空白后的字符串结果: ', s3.rstrip())
    print('输出调用 strip(\'!\')后的字符串结果: ', s4.strip('!'))
    # split()
    s5 = 'hello, world'
    print('采用split()的字符串结果: ', s5.split())
    print('采用split(\',\')的字符串结果: ', s5.split(','))
    # join()
    l1 = ['an', 'apple', 'in', 'the', 'table']
    print('采用join()连接列表 l1 的结果: ', ''.join(l1))
    print('采用\'-\'.join()连接列表 l1 的结果: ', '-'.join(l1))
    # replace()
    print('replace(\'o\', \'l\')的输出结果: ', s5.replace('o', 'l'))
    # index()
    print('s5.index(\'o\')的输出结果: ', s5.index('o'))
    # startswith() / endswith()
    print('s5.startswith(\'h\')的输出结果: ', s5.startswith('h'))
    print('s5.endswith(\'h\')的输出结果: ', s5.endswith('h'))
    # find()
    print('s5.find(\'h\')的输出结果: ', s5.find('h'))
    # upper() / lower() / title()
    print('upper() 字母全大写的输出结果: ', s5.upper())
    print('lower() 字母全小写的输出结果: ', s5.lower())
    print('title() 单词首字母大写的输出结果: ', s5.title())
    
    1.3 列表

    同样,列表也有很多内置的方法,这里介绍一些常见的方法:

    len(list):返回列表的长度
    append(obj) / insert(index, obj) / extend(seq):增加元素的几个方法
    pop() / remove(obj) / del list[index] / clear():删除元素
    reverse() / reversed:反转列表
    sort() / sorted(list):对列表排序,注意前者会修改列表内容,后者返回一个新的列表对象,不改变原始列表
    index():查找给定元素第一次出现的索引位置
    
    2. 数据类型的转换

    有时候我们需要对数据类型进行转换,比如列表变成字符串等,这种转换一般只需要将数据类型作为函数名即可。

    下面列举了这些转换函数:
    
    int(x, [,base]):将 x 转换为整数,base 表示进制,默认是十进制
    float(x):将 x 转换为一个浮点数
    complex(x, [,imag]):创建一个复数, imag 表示虚部的数值,默认是0
    str(x):将对象 x 转换为字符串
    repr(x): 将对象 x 转换为表达式字符串
    eval(str): 用来计算在字符串中的有效 Python 表达式,并返回一个对象
    tuple(s): 将序列 s 转换为一个元组
    list(s): 将序列 s 转换为一个列表
    set(s):转换为可变集合
    dict(d): 创建一个字典。d 必须是一个序列 (key,value)元组
    frozenset(s): 转换为不可变集合
    chr(x):将一个整数转换为一个字符
    ord(x):将一个字符转换为它的整数值
    hex(x):将一个整数转换为一个十六进制字符串
    oct(x):将一个整数转换为一个八进制字符串
    
    3.数字处理函数
    取整函数的原则;(math向上向下,int截断/整除// round)
    天花板ceil 与地板 floor ;
    int只管它的整数部分(无论正负);
    round 函数规则:四舍六入五取偶数(离他最近的偶数),区分正负
    // 取整函数去区分正负;数值都是往下走的,趋向于小值;(负数:正值+1取负值;)
    min(iterable,[key,default])    #可迭代的对象;
    pow(2,3)#2的3次方=2**3
    
    #合法数字的转化为字符;
    # bin 转换为二进制;
    # hex 转换为16进制;
    # math.pi=3.141592654
    # type()函数输出的是类型,不是字符;
    # isinstance(a,b)   a是否是b的类型;
    

    如何快速判断一个数据类型是否可以更改呢?有以下两种方法:
    id():判断变量更改前后的 id,如果一样表示可以更改,不一样表示不可更改。
    hash():如果不报错,表示可以被哈希,就表示不可更改;否则就是可以更改。

    i = 2
    print('i id value=', id(i)) 
    i += 3
    print('i id value=', id(i)) 
    
    输出结果,更改前后 id 是更改了,表明整型变量是不可更改的。
    i id value= 1758265872
    i id value= 1758265968
    
    然后在列表变量上进行同样的操作:
    
    l1 = [1, 3]
    print('l1 id value=', id(l1)) 
    l1.append(4)
    print('l1 id value=', id(l1))
    
    输出结果,id 并没有改变,说明列表是可以更改的。
    l1 id value= 1610679318408
    l1 id value= 1610679318408
    
    然后就是采用 hash() 的代码例子:
    # hash
    s = 'abc'
    print('s hash value: ', hash(s)) 
    l2 = ['321', 1]
    print('l2 hash value: ', hash(l2)) 
    
    输出结果如下,对于字符串成功输出哈希值,而列表则报错 TypeError: unhashable type: 'list',这也说明了字符串不可更改,而列表可以更改。
    s hash value:  1106005493183980421
    TypeError: unhashable type: 'list'
    
    总结:
    1. 内置函数是可迭代对象;本质上是列表是可迭代对象;
    2. 隐式转换(数值类型之间的转换,高级语言都支持)能像整型像整形,整形不够就浮点型;
    3. 强弱转换(不同类型转换)
    

    相关文章

      网友评论

        本文标题:45、2-数值处理和类型判断

        本文链接:https://www.haomeiwen.com/subject/vypaaqtx.html