zoukankan      html  css  js  c++  java
  • Python数据类型-数据集

    数据类型-数据集 

    一、基本数据类型——列表

    列表的定义:

    定义:[] 内以逗号分隔,按照索引,存放各种数据类型,每个位置代表一个元素

    列表的创建:

    list_test=['张三', '李四', '王五']

    list_test = list('王五')

    列表的特点和常用操作

    特性:

    1. 可存放多个值

    2. 按照从左到右的顺序定义列表元素,下标从0开始顺序访问,有序

    3. 可修改指定索引位置对应的值,可变

    常用操作:

    # 索引

    i = ['egon', 'test', 'seven', 'mike']
    print(i[0])
    

     

    # 切片

    i[0:2]

    ['egon', 'test']

    >>> i[2:5]

    ['seven', 'mike']

    >>> i[:2]

    ['egon', 'test']

    >>> i[::2]

    ['egon', 'seven']

    >>> i[::-1]

    ['mike', 'seven', 'test', 'egon']

    # 追加

    >>> i.append('eve')

    >>>  i

    ['egon', 'test', 'seven', 'mike', 'eve']

    # 删除

    >>> i.remove('eve')

    >>> i

    ['egon', 'test', 'seven', 'mike']

    >>> i.pop()

    'mike'

    # 长度

    >>> len(i)

    # 包含

    >>> 'mike' in i

    True

    列表与字符串 —— split 和 join

    # 分割

    item1 = []
    item = "www.luffycity.com"
    item1 = item.split('.')
    print(item1)
    

     # 连接

    >>> i= ['hi', 'mike']

    >>> '!'.join()

    'hi!mike'

    # range

    count = 0
    for i in range(101):
        if i % 2 == 0:
            count += i
    print(count)
    

      

    二、 基本数据类型—— 元组

    元组的定义和特性

    特性:

    • 可存放多个值
    • 不可变
    • 按照从左到右的顺序定义元组元素,下标从0开始顺序访问,有序

    元组的创建与常用操作

    # 创建

    ages = (11,22, 33, 44, 55)

    ages = tuple((11,22, 33, 44, 55))

    # 常用操作

    # 索引

    >>> ages = (11,22, 33, 44, 55)

    >>> ages[0]

    11

     

    >>> ages[-1]

    55

    # 切片 : 同list

    # 循环

    >>> for age in ages:

             print(age)

    11

    22

    33

    44

    55

    # 长度

    >>> len(ages)

    5

    # 包含

    >>> 11 in ages

    True

    元组的特性详解

    1.  可存放多个值

    如果元组中只有一个值

    t = (1,)

    t = (1)   # <==>t = 1

    元组中不仅可以存放数字,字符串,还可以存放更加复杂的数据类型

    2. 不可变

    元组本身不可变,如果元组中还包含其它可变元素,这些可变元素可以改变

    三 、可变 不可变数据类型和hash

    可变类型 不可变类型
    列表 数字
      字符串
      元组

    # 列表

    >>> i = [1,2,3,4]

    >>> id(i)

    4392665160

    >>> i[1] = 1.5

    >>> i

    [1,1.5,3,4]

    >>> id(i)

    4392665160

    # 数字

    >>> a = 1

    >>> id(a)

    4297537952

    >>> a+=1

    >>> id(a)

    4297537984

    从内存角度看列表与数字的变与不变

    字符串

    # 例1

    >>> s = 'hello'

    >>> s[1] = 'a'

    Traceback (most recent call last):

        File "<pyshell#5>". line 1, in<module>

            s[1] = 'a'

    TypeError:'str' object does not support item assignment

    # 例2

    >>> s = 'hello'

    >>> id(s)

    4392917064

    >>> s += 'world'

    >>> s

    'hello world'

    >>> id(s)

    4393419504

        字符串也可以像列表一样使用索引操作,但是通过上例可以看出,不能像修改列表一样修改一个字符串的值,当对字符串进行拼接的时候,原理和整数一样,id值已经发生了变化,id值已经发生了变化,相当于变成了另外一个字符串。

    元组不允许修改

    >>> t = (1,2,3,4)

    >>> t[1] = 1.5

    Traceback (most recent call last):

        File "<pyshell#5>". line 1, in<module>

            t[1] = 1.5

    TypeError: 'tuple' object does not support item assignment

    hash

    存储如下一些数据:

    张三 13912345678

    李四 13812345678

    王五 13612345678

    >>> hash("张三")
    -354361033326252388
    >>> hash("李四")
    -8011736106419318409
    >>> hash("王五")
    -5353383273595561117

    四、字典

    字典的定义和特性

    字典是python语言中唯一的映射类型

    定义: {key1:value1,key2:value2}

    1、键与值用冒号":"分开

    2、项与项用逗号“,” 分开

    特性:

    1. key-value结构
    2. key必须可hash,且必须为不可变数据类型,必须唯一
    3. 课存放任意多个值,课修改、可以不唯一
    4. 无序

    字典的创建与常见操作

    person = {"name":"mike", age:20}

    person = dict(name='mike', age=20}

    person = dict((['name','mike'],['tom',22]))

    {}.fromkeys(seq,100)  # 不指定100默认为NOne

    # 注意

    >>> dic = {}.fromkeys(['k1','k2'],[])
    >>> dic
    {'k1': [], 'k2': []}

    >>> dic['k1'].append(1)
    >>> dic
    {'k1': [1], 'k2': [1]}

    字典的常见操作

    键、值、键值对

    1. dic.keys()  返回一个包含字典所有key的列表
    2. dic.values()  返回一个包含字典所有value的列表
    3. dic.items()   返回一个包含所有(键、值)元组的列表
    4. dic.iteritems()、dic.iterkeys()、dic.itervalues() 与它们对应的非迭代方法一样,不同的是他们返回一个迭代值,而不是一个列表

    # 新增

    1. dic['new_key'] = 'new_value'
    2. dic.setdefault(key,None), 如果字典中不存在key键,由dic[key]= default 为他赋值

    # 删除

    1. dic.pop(key[,default]) 和get方法相似。如果字典中存在key,删除并返回key对应的vuale;如果key不存在,且没有给出default的值,则引发keyerror异常
    2. dic.clear() 删除字典中的所有项或元素

    # 修改

    1. dic['key'] = 'new_value',如果key在字典中存在,‘new_value'将会替代原来的value值
    2. dic.update(dic2) 将字典dic2的键值对添加到字典dic中

    # 查看

    1. dic['key'] ,返回字典中key对应的值,若key不存在字典中,则报错
    2. dic.get(key,default=None) 返回字典中key对应的值,若key不存在字典中,则返回default的值

    # 循环

    1. for k in dic.keys()
    2. for k,v in dic.items()
    3. for k in dic

    # 长度

    len(dic)

    五、 集合

    认识集合

               集合是一个数学概念,由一个或多个确定的元素所构成的整体叫集合

              集合中的元素有三个特点:

    1. 确定性(元素必须可hash)
    2. 互异性(去重)
    3. 无序性(集合中的元素没有先后之分),如集合{3,4,5}和{3,5,4}算作一个集合

              注意: 集合存在的意义就在于去重和关系运算

    集合的关系运算

    &.& =:交集——即学习跆拳道课程也学习机器人的同学

    i={'张三','李四','王五'}
    
    p={'张三','李四','mike'}
    
    print(i.intersection(p))
    
    print(i & p)
    

      

    |,|=:合集,也叫并集——学习跆拳道课程和学习机器人的同学

    i={'张三','李四','王五'}
    
    p={'张三','李四','mike'}
    
    print(i.union(p))
    print(i|p)
    

    -,-=:差集——只在学习跆拳道课程而不学习机器人的同学

    i={'张三','李四','王五'}
    
    p={'张三','李四','mike'}
    
    print(i.difference(p))
    print(i-p)
    

      

    ~,~=:对称差集——只在学习跆拳道课程或只学习机器人的同学

    i={'张三','李四','王五'}
    
    p={'张三','李四','mike'}
    
    print(i.symmetric_difference(p))
    print(i^p)
    

      

    包含关系

    in,not in:判断某元素是否在集合内

    ==,!= : 判断两个集合是否相等

    两个集合之间一般有三种关系,相交、包含、不相交,在python中分别用下面的方法判断

    • set.isdisjonit(s): 判断两个集合是不是不相交
    • set.issuperset(s): 判断集合是不是包含其他集合,等同于a>=b
    • set.issubset(s): 判断集合是不是被其他集合包含,等同于a<=b

    集合的常用操作:

    # 元素的增加

    单个元素的增加: add(),add的作用类似列表中的append

    对序列的增加:update(),而update类似extend方法,update方法可以支持同时传入多个参数

    #元素的删除

    集合删除单个元素有两种方法:

    元素不在原集合中时:

    set.discard(x)不会抛出异常

    set.remove(x) 会抛出keyError错误

    pop(): 由于集合是无序的,pop返回的结果不能确定,且当集合为空时调用pop会抛出keyerror错误

    clear(): 清空集合

    六:collections

    collections模块:

    1. namedtuple: 生成可以使用名字来访问元素内容的tuple子类
    2. deque:双端队列,可以快速的从另外一侧追加和推出对象
    3. counter:计数器,主要用来计数
    4. orderddict:有序字典
    5. defaultdict:带有默认值的字典

    # namedtuple

    from collections import namedtuple
    Point = namedtuple('Point', ['x', 'y'])
    p = Point(1, 2)
    print(p.x)
    print(p.y)
    

     输出:

    1
    2

    namedtuple是一个函数,它用来创建一个自定义的tuple对象,并且规定了tuple元素的个数,并可以用属性而不是索引来引用tuple的某个元素

    类似的,要用坐标和半径表示一个圆,可以用namedtuple定义

    # namedtuple('名称',[属性list]):

    Circle = namedtuple('Circle',['x','y','r'])

    deque

         deque 是为了高效实现插入和删除操作的双向列表,适合用于队列和栈

    from collections import deque
    q = deque(['a', 'b', 'c'])
    q.append('x')
    q.appendleft('y')
    print(q)
    

      

    defaultdict

      使用dict时,如果引起的key不存在,就会抛出KeyError。希望key不存在时,返回默认值,用defaultdict

    orderedDict

    使用dict时,key是无序的,在对dict做迭代时,无法确定key的顺序

    要保持key的顺序,可以用orderedDict

    orderedDict可以实现一个FIFO(先进先出)的dict,当容量超出限制时,先删除最早添加的key

    from collections import Counter
    c = Counter()
    for ch in 'programming':
        c[ch] = c[ch] + 1
    print(c)
    

     输出:

    Counter({'r': 2, 'g': 2, 'm': 2, 'p': 1, 'o': 1, 'a': 1, 'i': 1, 'n': 1})

     Counter实际上也是dict的一个子类

     

    知识点小结:

    基本数据类型:

    可变数据类型

    不可变数据类型
    列表(list) 数字类(bool,int,float,complex)
     字典(dict) 字符串(str)
     集合(set) 元组(tuple)
      不可变集合(frozenset)

    扩展数据类型

    1. namedtuple: 生成可以使用名字来访问元素内容的tuple子类
    2. deque:双端队列,可以快速的从另外一侧追加和推出对象
    3. counter:计数器,主要用来计数
    4. orderddict:有序字典
    5. defaultdict:带有默认值的字典
  • 相关阅读:
    Java引用类型转换
    SWFUpload多文件上传使用指南
    SpringMVC中与Spring相关的@注解
    三层——c#版
    初识三层
    vb.net 总结
    设计模式总结
    设计模式系列——装饰模式
    设计模式系列——策略模式
    设计模式系列——简单工厂模式
  • 原文地址:https://www.cnblogs.com/mike-liu/p/8996691.html
Copyright © 2011-2022 走看看