zoukankan      html  css  js  c++  java
  • 一起学Python——数据类型详解

    和学习其他编程语言一样,首先要了解一门语言的数据类型。

    Python的数据类型有整型、浮点型、字符串、布尔型、日期时间类型、list列表、set集合、tuple元组、dict词典等。

    1、整型
    就是数学中的整数,包括负整数。
    定义整型的方法:

    a = 100
    b = -100
    print(a)
    print(b)
    结果:
    100
    -100
    

    Python定义变量的语法和其他的编程语言不一样,例如Java定义整型变量的语法:int a = 10;

    Python是根据你的变量的值来确定变量的类型。
    a = 12就是整型,a = "abc"就是字符串。

    2、浮点型
    就是数学中的小数。例如:

    a = 12.3
    print(a)  
    

    变量a为浮点型。如果浮点变量的值很多或者很小,则建议用科学计数法定义一个浮点变量。例如:

    a = 3.14e9  
    print(a)。
    

    **3、字符串 **
    用单引号'、双引号"或者'''三引号扩起来的文本。
    下面的代码定义了三个变量,str1和str2的值都是123qaz。
    str3的值为:
    123qaz
    456wsx
    '''三引号用于定义多行字符串。

    str1 = '123qaz'
    str2 = "123qaz"
    str3 = '''123qaz
    456wsx'''
    print(str1)
    print(str2)
    print(str3)
    

    4、布尔型
    只有True和False两个值,例如:

    flag True
    print(flag)
    flag False
    print(flag)
    

    布尔类型一般用作条件判断,例如:

    a = 1
    b = 2
    if a > b:
        print(a)
    else:
        print(b)
    

    布尔类型还可以用于or、and和not逻辑运算。

    or逻辑或运算,当两个布尔变量的值有一个为True时,结果就是True,所有的布尔类型的数值都为False时,结果才是False。例如:

    flag1 = True
    flag2 = False
    print(flag1 or flag1)
    
    flag3 = False
    flag4 = False
    print(flag3 or flag4)
    

    打印结果:
    True
    False

    and逻辑与运算,只有所有的布尔变量为True是,结果才是True,否则结果是False,例如:

    flag1 = True
    flag2 = False
    print(flag1 and flag1)
    
    flag3 = True
    flag4 = True
    print(flag3 or flag4)
    

    not逻辑非运算,not False的结果为True,not True的结果为False,这是一个单目逻辑运算符。

    5、日期时间类型
    Python提供了time模块处理时间。

    获取当前时间戳:

    >>> import time
    >>> print(time.time())
    1541082277.3144386
    

    time()函数返回的是浮点数。

    localtime()函数返回的是一个struct_time元组,struct_time元组中有9个元素,分别代表年、月、日、小时等。

    >>> print(time.localtime(time.time()))
    time.struct_time(tm_year=2018, tm_mon=11, tm_mday=1, tm_hour=22, tm_min=30, tm_sec=56, tm_wday=3, tm_yday=305, tm_isdst=0)
    

    struct_time元组中每个元素代表的意义如下:

    属性 代表的意义
    tm_year 2018
    tm_mon 1-12
    tm_mday 1-31
    tm_hour 0-23 小时
    tm_min 0-59 分钟
    tm_sec 0-61 秒,61是闰秒
    tm_wday 0-6 周一到周日,0是周一
    tm_yday 1-366 一年中的第几日
    tm_isdst 0,1,-1 夏令时标识,1是夏令时,0不是夏令时,默认值是-1

    strftime()方法将时间转化为字符串,具体用法如下:

    >>> print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime()))#精确到秒的日期格式
    2018-11-01 23:00:36  
    >>> print(time.strftime('%Y',time.localtime()))#显示年份
    2018   
    >>> print(time.strftime('%m',time.localtime()))#月份
    11
    >>> print(time.strftime('%d',time.localtime()))#显示日
    01
    >>> print(time.strftime('%H:%M:%S',time.localtime()))#显示当前的时间
    23:01:19
    >>> print(time.strftime('%Y-%m-%d',time.localtime()))#显示当前的日期
    2018-11-01
    >>> print(time.strftime('%U',time.localtime()))#显示一年当中的第几周
    43
    >>> print(time.strftime('%w',time.localtime()))#显示周几,4表示周四,0表示周日
    4
    ``` python
    
    两个日期相减。
    如果日期是字符串形式,则必须转为秒数才能相减:
    ``` python
    >>> import datetime
    >>> from_time = "2018-11-01 10:10:20"
    >>> to_time = "2017-12-23 12:12:12"
    >>> d = datetime.datetime.strptime(from_time,"%Y-%m-%d %H:%M:%S")
    >>> b = datetime.datetime.strptime(to_time,"%Y-%m-%d %H:%M:%S")
    >>> print(time.mktime(d.timetuple()) - time.mktime(b.timetuple()))
    27035888.0
    

    datetime.datetime.strptime()方法将字符串格式的日期转换为struct_time元组,time.mktime()方法将struct_time元组日期转为秒。

    字符串日期格式和秒互转
    字符串日期格式转为秒:

    from_time = "2018-11-01 23:36:35"
    d = datetime.datetime.strptime(from_time,"%Y-%m-%d %H:%M:%S")
    from_time_float = time.mktime(d.timetuple())
    

    秒转为字符串日期格式:

    current_time = time.time()
    print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(current_time)))
    

    6、列表list
    Python中常用的数据类型,用[]将所有元素括起来的集合。列表中的元素可以是任意类型,例如字符串、数字类型、布尔类型等,还可以是列表。列表中的元素通过“,”逗号分隔,列表中的元素可以修改。

    创建一个列表

    list1 = [1,'abc',True]
    

    列表list1有三元素,数字类型1,字符串“abc”,布尔类型True。

    读取列表元素
    通过索引访问列表中的元素,下面是访问第三个元素的方法:

    >>> list1 = [1,'abc',True]
    >>> print(list1[2])
    True
    

    将2变为-2时就是读取倒数第2个元素:

    >>> list1[-2]
    'abc'
    

    索引-1是读取最后一个元素:

    >>> list1[-1]
    True
    

    当索引越界时出报“IndexError: list index out of range”列表索引超出范围的错误。

    >>> print(list1[4])
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    IndexError: list index out of range
    

    求列表长度

    >>> list1 = [1,'abc',True]
    >>> print(len(list1))
    3
    

    替换列表元素:
    通过索引可以直接替换掉列表指定位置的元素,注意索引越界。下面代码将list1列表第二个元素从abc变为def

    >>> list1 = [1,'abc',True]
    >>> print(list1)
    [1, 'abc', True]
    >>> list1[1]='def'
    >>> print(list1)
    [1, 'def', True]
    

    pop方法删除列表元素

    >>> list1 = [1,'abc',True]
    >>> list1.pop()
    True
    >>> print(list1)
    [1, 'abc']
    >>> list1.pop(0)
    1
    >>> print(list1)
    ['abc']
    

    pop()方法删除最有一个元素,pop(j)方法删除指定元素,j是索引,注意索引越界的问题。

    截取列表

    >>> list1 = ['a','b','c','d','e','f','g']
    >>> list2 = list1[2:4]#截取从list1的第三个元素开始到第五个元素截止生成新的列表list2
    >>> print(list2)
    ['c', 'd']
    >>> list3 = list1[2:]#从list1列表的第三个元素开始截取生成列表list3
    >>> print(list3)
    ['c', 'd', 'e', 'f', 'g']
    

    列表相加
    两个列表通过+符号生成新的列表

    >>> list1 = ['a','b','c','d','e','f','g']
    >>> list2 = [1,2,3]
    >>> list3 = list1 + list2
    >>> print(list3)
    ['a', 'b', 'c', 'd', 'e', 'f', 'g', 1, 2, 3]
    

    7、tupple元组
    使用()将不同类型元素括起来的集合,元组的特点是数据不能修改。

    和list列表一样,tupple中的元素不限制类型,既可以是整型,也可以是布尔型、list列表等,元素之间用逗号分隔。

    创建一个tuple

    >>> tuple_a = (1,'abc',False)
    >>> print(tuple_a)
    (1, 'abc', False)
    

    如果创建的tuple只有一个元素时,必须在唯一的一个元素后面加上“,”来消除歧义:

    >>> tuple_c = (1)
    >>> print(tuple_c)
    1
    >>> tuple_d = (1,)
    >>> print(tuple_d)
    (1,)
    

    通过上面的代码可知,如果不在唯一的一个元素后面加上一个",",Python就会认为tuple_c是数字1而不是创建一个tuple实例。

    试图修改tuple中的元素时会报TypeError: 'tuple' object does not support item assignment的错误:

    >>> tuple_a[0] = 2
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: 'tuple' object does not support item assignment
    

    读取tupple中的元素

    >>> tupple_a = (1,'abc',False)
    >>> print(tupple_a[2])
    False
    

    虽然tuple中的元素是不可修改的,但是可以在创建的tuple实例中添加一个list元素,达到元素可变的目的:

    >>> tuple_a = (1,[2,'abc'])
    >>> print(tuple_a)
    (1, [2, 'abc'])
    >>> tuple_a[1][1]='def'
    >>> print(tuple_a)
    (1, [2, 'def'])
    

    上面的代码达到了修改tuple实例中元素的目的。

    和list列表一样,,tuple也支持tuple相加、截取的操作:

    >>> tuple_a = (1,2)
    >>> tuple_b = ('a','b')
    >>> tuple_c = tuple_a + tuple_b #两个tuple相加
    >>> print(tuple_c)
    (1, 2, 'a', 'b')
    >>> print(tuple_c[1:3])#截取tuple
    (2, 'a')
    >>> print(tuple_c[1:])#截取tuple
    (2, 'a', 'b')
    

    由于tuple的元素不可修改,因此tuple没有删除元素的方法。

    8、Set集合
    通过{}符号,将元素括起来的数据类型,元素之间以","逗号分隔,Set集合内的元素不能重复。

    创建Set集合

    >>> set_a = set([1,2,3,'a','b','c'])
    >>> print(set_a)
    {'a', 1, 2, 3, 'c', 'b'}
    >>> b = {1,2,'a','c'}
    >>> print(b)
    {'a', 1, 2, 'c'}
    

    创建一个set有两种方式:
    1、使用set()方法,这种方式必须提供一个list作为参数。
    2、使用{}方式,如果是创建空的set集合,必须使用set(),{}这种方式是创建空的dict词典。
    从上面的代码可以看到set中的元素时无序的。

    set会自动过滤掉重复的元素

    >>> set_a = set([1,2,3,2,3,'a','b','c','b','a'])
    >>> print(set_a)
    {'a', 1, 2, 3, 'c', 'b'}
    

    增加set集合元素

    >>> set_a.add(21)
    >>> print(set_a)
    {'a', 1, 2, 3, 'c', 'b', 21}
    

    set集合通过add(key)方法添加元素,重复添加同一个元素不会报错,但是没有任何效果:

    >>> set_a.add(21)
    >>> print(set_a)
    {'a', 1, 2, 3, 'c', 'b', 21}
    >>> set_a.add(21)
    >>> print(set_a)
    {'a', 1, 2, 3, 'c', 'b', 21}
    

    删除set集合元素

    >>> set_a.remove('c')
    >>> print(set_a)
    {'a', 1, 2, 3, 'b', 21}
    

    在删除集合元素的时候务必要确保该元素的存在,如果删除一个不存在的元素,会报KeyError的错误:

    >>> set_a = set([1,2])
    >>> print(set_a)
    {1, 2}
    >>> set_a.remove(12)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    KeyError: 12
    >>> set_a.remove(1)
    

    set集合具备数学集合中的交、并、差集等集合运算

    >>> set_b = set([1,'d','e',4,5,'a'])
    >>> set_a = set([1,2,3,'a','b','c'])
    >>> print(set_a & set_b)  #集合交集运算
    {'a', 1}
    >>> print(set_a | set_b) #集合并集运算
    {'a', 1, 2, 3, 'c', 4, 5, 'd', 'b', 'e'}
    >>> print(set_a - set_b) #集合差集运算
    {'c', 2, 3, 'b'}
    >>> print(set_a ^ set_b) #求两个集合不同时存在的元素
    {'c', 2, 'e', 4, 5, 'd', 3, 'b'}
    

    9、dict词典
    key-value键值对,和java中的Map一样,使用{}将键值对扩起来,元素之间以“,”逗号分隔。

    创建dict:

    >>> dict_a = {1:'a',2:'b'}
    >>> print(dict_a)
    {1: 'a', 2: 'b'}
    

    读取dict元素:

    >>> print(dict_a.get(1))
    a
    >>> print(dict_a.get(3))
    None
    

    dict通过get(key)方法读取key对应的value值,如果value不存在,则显示None。

    添加dict元素:
    通过dict_name[key] = value给dict添加元素

    >>> dict_a = {1:'a',2:'b'}
    >>> dict_a['a'] = 123
    >>> print(dict_a)
    {1: 'a', 2: 'b', 'a': 123}
    

    如果同一个key多次加入一个dict中,会覆盖掉前面的value值。

    删除dict元素:

    >>> dict_a.pop('a')
    123
    >>> print(dict_a)
    {1: 'a', 2: 'b'}
    >>> dict_a.pop('b')
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    KeyError: 'b'
    

    通过使用pop(key)方法删除dict中的键值对,如果key不存在,则会报KeyError的错误。

    遍历dict中的元素:

    遍历key

    >>> dict_a = {1:'a',2:'b','a':3,'b':4}
    >>> for key in dict_a:
            print(key)
    1
    2
    a
    b
    >>> for key in dict_a.keys():
            print(key)
    1
    2
    a
    b
    

    上面两种遍历key的方式效果是等价的。

    遍历value

    >>> dict_a = {1:'a',2:'b','a':3,'b':4}
    >>> for value in dict_a.values():
            print(value)
    a
    b
    3
    4
    

    同时遍历key和value
    方法一:

    >>> dict_a = {1:'a',2:'b','a':3,'b':4}
    >>> for k,v in dict_a.items():
            print(k,v)
    1 a
    2 b
    a 3
    b 4
    

    方法二:

    >>> dict_a = {1:'a',2:'b','a':3,'b':4}
    >>> for kv in dict_a.items():
            print(kv)
    (1, 'a')
    (2, 'b')
    ('a', 3)
    ('b', 4)
    

    这种方式会将每个key-value键值对转换为一个tuple。

    方法三:

    >>> dict_a = {1:'a',2:'b','a':3,'b':4}
    >>> for (key,value) in dict_a.items():
            print(str(key) + ':' + str(value))
    1:a
    2:b
    a:3
    b:4
    

    这种方式要保证key和value都是字符串类型。

  • 相关阅读:
    如何提升程序员的工作效率?
    MacOS 上网络故障诊断
    阅读混淆过的Android代码的确不易
    复旦投毒案落下帷幕
    正确把握深度和广度
    Freemarker的数据模型使用
    xilink se14.7 win10闪退
    浅谈 pid的原理与差异
    win10系统激活
    stm8 同时使用dac和adc 采集异常,电平异常
  • 原文地址:https://www.cnblogs.com/airnew/p/9927103.html
Copyright © 2011-2022 走看看