• Python第二周Round2-其他数据类型,列表,元祖,字典


    这周太忙了,决算审计整天加班,上级公司年末检查,在加上家中赵女士需要参加考试,真的是没有时间,现在腾出空来,把这周学的知识总结一下。

    先谈下感受把,学习真的是一件很辛苦的事,在年轻的时候感觉力量是无穷的,没啥事,干就是了,但是现在感觉有点怂x了,谈什么坚持啊,有时间睡个觉多美滋滋啊~不过python语言还是很友好的,目前还是动力十足的,加油。


    一、列表list

    列表数据类型是一种基本的数据类型,用于存储多个数据,属于可迭代的对象,且可以修改,如li=[11,"小果果",33]

    (一)列表的基本操作有下:

    • 1.索引,用[n]表示,在前面有过叙述,表示列表中某个位置的元素是啥;
    • 2.切片,用[n,n+j]表示;
    • 3.相加,add
    • 4.删除,del
    • 5.长度,len
    • 6.循环,for i in li:
    • 7.包含,

    (二)列表的其他需要注意的地方

    1.通过使用list函数可以将字符串转换为一个序列。(注意:list函数适用于所有类型的序列,而不只是字符串);

    2.列表可以使用所有适用于序列的标准操作,如索引、分片、连接和乘法;

    (三)基本方法

    1.append()

    li = [11, 22, 33, "小果果是个笨蛋"]
    li.append(",你认为对不对?")
    print(li)  # 输出 [11, 22, 33, '小果果是个笨蛋', ',你认为对不对?']
    

      

    根据输出的结果,以后规定,字符串用单引号' '来表示,虽然用双引号也没有错误,但是要养成良好的习惯,不是吗?

    2.count() 

    用于统计某个元素在列表中出现的次数

    # 字符串的count()函数,我怎么记得没有记呢,是不是老年痴呆来?
    li = "小果果是个笨蛋"
    print(li.count("果"))  # 输出 2
    
    # 列表的count()函数,
    li = [11, 22, 33, "小果果是个笨蛋"]
    print(li.count(11))  # 输出 1
    

      

    3.extend() 

    可以在列表末尾一次性追加另一个序列中的多个值,和连接操作不同,extend方法是修改了被扩展的序列(调用extend方法的序列),而原始的连接操作返回的是一个全新的列表

    # 1.语法 L.extend(iterable)‘interable 可迭代对象’;
    # 2.该方法没有返回值,但会在原来的列表末尾追加可迭代对象中的元素,例子中,c的输出值为'None';
    # 3.把要拓展的list放到前面,括号里面为添加的数据
    a = ['小果果是一只狗', '棕色的', '卷毛的']
    b = ['乖巧的', '母的', '没有起床气的']
    d = a + b
    print(a)  # 输出 ['小果果是一只狗', '棕色的', '卷毛的'] 表明a列表没有被改变,d为一个全新的序列
    c = a.extend(b)  # 输出 None
    print(a)  # 输出 ['小果果是一只狗', '棕色的', '卷毛的', '乖巧的', '母的', '没有起床气的']
    

      

    重点:对于append()方法和extend()方法的区别

    (1).append()方法是将要添加的对象看作一个整体加到添加对象的末尾,可以是一个int,啥都可以(因为任何数据类型都可以添加到list当中)

    (2).extend()方法必须是添加可迭代对象,interable的数据,如果添加int类型,bool类型,对不起,报错。且添加的是对象中的每一个可迭代对象。

    4.index()用于从列表中找出某个值第一个匹配项的索引位置

     输出的是int类型

    5.insert()

    # 1.语法:L.insert(index, object) -- insert object before index
    # 2.作为一个整体插入
    a = ['小果果是一只狗', '棕色的', '卷毛的']
    b = [11, 22, 33, 44]
    a.insert(2, b)
    print(a) #输出 ['小果果是一只狗', '棕色的', [11, 22, 33, 44], '卷毛的']
    

      

    6.pop()

    移除列表中的一个元素(默认是最后一个),并且返回该元素的值。通过pop方法可以实现一种常见的数据结构——栈(LIFO,后进先出)。

    # 1.语法  L.pop([index]) -> item -- remove and return item at index (default last);
    # 2.超出index的值会报错返回。
    a = ['小果果是一只狗', '棕色的', '卷毛的']
    a.pop(2)
    print(a)  # 输出 ['小果果是一只狗', '棕色的']
    

      

    其实就是一个定点删除的功能,无切片删除功能。

    6.remove()

    移除列表中某个值的第一个匹配项

    # 1.语法 L.remove(value) -> None -- remove first occurrence of value.
    # 2.返回值为None,也就是说无数据返回,直接对list进行了修改,同extend等,列表很多都是这样的,毕竟是可以修改的数据类型,需要记住!
    # 3.无数据时,报错返回!
    a = ['小果果是一只狗', '棕色的', '卷毛的']
    a.remove('棕色的')
    print(a)  # 输出 ['小果果是一只狗', '卷毛的']
    

      

    7.reverse()

    将列表中的元素反向存放

    # 1.语法 L.reverse() -- reverse *IN PLACE*
    a = ['小果果是一只狗', '棕色的', '卷毛的']
    a.reverse()
    print(a)  # 输出 ['卷毛的', '棕色的', '小果果是一只狗']
    

      

    8.sort()

    对列表进行排序。注意:sort函数时没有返回值的(None),它作用于源list。可以通过sorted函数来获取已排序的列表副本。

    # 1.L.sort(key=None, reverse=False) -> None -- stable sort *IN PLACE*
    # 2.key-- 可选参数, 如果指定了该参数会使用该参数的方法进行排序。
    # reverse-- 可选参数,是否反向排序,默认为False。
    # 3.新函数: sorted() 可对所有可迭代的对象进行排序,返回list数据。
    a = ['小果果是一只狗', '棕色的', '卷毛的']
    a.sort()
    print(a)  # 输出 ['卷毛的', '棕色的', '小果果是一只狗']
    print(sorted('hello'))  # 输出 ['e', 'h', 'l', 'l', 'o']
    

      

    排序规则(list中):

    (1)int数据,默认是升序排列;

    (2)str类型中的汉字排序问题:此问题很难,是个非常复杂的问题,后续学景气了,在回来解决,如果对中文排序的问题。(或许有模块,但是现在还没接触,暂且当作一个负责的问题看待)

    问题2:函数和方法的区别,后续补充。


    二、元祖

    元组和列表最大的区别在于:元组不能修改。

    (一)基本规则

    创建元组很简单,只需要将元素用括号括起来,并使用逗号分隔符(即使只有一个元素)来分隔各个元素即可:

    在tuple的末尾加个逗号','以示专业,没有任何区别,至于为什么,我也不知道,老炮儿说的。

    a = ('阿', '吃', '拔', '阿大', '拔萝卜', '吃饭',)
    print(type(a))  # 输出 <class 'tuple'>
    

      

    (二)基本用法

    • 1.索引
    • 2.切片
    • 3.循环
    • 4.长度
    • 5.包含

    (三)tuple的方法

    就俩 count()和index()


    三、字典

    (一)基本规则

    字典(dict)中的值没有特定顺序。

    键可以是数字、字符串甚至是元组。键一般是唯一的,如果重复最后的一个键值对会替换前面的,值不需要唯一。

    字典是无序的,每次输出,顺序都会随机发生变化

    a = {1: '阿', 2: '吃', 3: '拔', 4: '阿大', 5: '拔萝卜', 6: '吃饭', }
    print(type(a))  # 输出 <class 'dict'>
    

      

    (二)基本方法

    • 1.索引
    • 2.新增
    • 3.删除
    • 4.键、值、键值对
    • 5.循环——说明也是可迭代对象
    • 6.长度 

    (三)其他方法

    这里在ppycharm中调用使用手册时,出了个小插曲~

    敲入 dict(),然后ctrl+单击时,并没有出现字典的方法

    而敲入dict{},然后就出现了~很奇怪,至于是为什么,暂时没有相通,后续学完这段课程整理时候,在回来做解释。

    1.clear()

    函数会清除字典中所有的项

    # 语法 D.clear() -> None.  Remove all items from D
    a = {1: '小果果', 2: '棕色的', 3: '卷毛的', }
    a.clear()
    print(a)  # 输出 {}
    

      

    2.copy()

    函数会返回一个具有相同key-value对的新字典(浅复制)

    # 语法 D.copy() -> a shallow copy of D
    a = {1: '小果果', 2: '棕色的', 3: '卷毛的', }
    b = a.copy()
    print(b)  # 输出 {1: '小果果', 2: '棕色的', 3: '卷毛的'}
    

      

    这里又有一个小插曲,前面也讲到了在元祖的最后加一个逗号,其实,实践证明,在list/元祖/字典的最后加个逗号,都不会改变原来的值

    3.fromkeys()

    创建一个新字典,fromkeys(*args, **kwargs) 以*args中元素做字典的键,**kwargs为字典所有键对应的初始值

    # 语法 Returns a new dict with keys from iterable and values equal to value
    # fromkeys(*args, **kwargs)
    a = {1: '小果果', 2: '棕色的', 3: '卷毛的', }
    b = 'aaaa'
    new_a = dict.fromkeys(a)
    new_b = dict.fromkeys(b, 2)
    print(new_a, a)  # 输出 {1: None, 2: None, 3: None} {1: '小果果', 2: '棕色的', 3: '卷毛的'}
    print(new_b, b)  # 输出 {'a': 2} aaaa
    

      

    需要注意的地方,在python的api文件中,*args和**kwargs是表示可以使用任何数据类型或者值,但是对于fromkeys方法,其实只有元祖和字典是有用的,用其他的,都没啥意思。

    且此函数api中标注为  @staticmethod ,为静态方法,后续在细细探究,此地方留个疑问。

    4.get()

    可以访问字典中的项,如果不存在,返回一个None(或者自定义一个默认值)或者返回给定d的值

    # 语法 D.get(k[,d]) -> D[k] if k in D, else d.  d defaults to None
    # get(self, k, d=None)
    a = {1: '小果果', 2: '棕色的', 3: '卷毛的', }
    s = a.get(5, '哈哈')
    print(s)  # 输出 哈哈
    

      

    5.items()

    循环获取key和value,返回的为列表数据。一般用于for语句迭代

    # 语法 D.items() -> a set-like object providing a view on D's items
    # items(self)
    a = {1: '小果果', 2: '棕色的', 3: '卷毛的', }
    s = a.items()
    print(s)  # 输出 dict_items([(1, '小果果'), (2, '棕色的'), (3, '卷毛的')])
    

      

    6.keys()

    循环获取字典中所有key,一般用于for循环迭代。

    # 语法 D.keys() -> a set-like object providing a view on D's keys
    # keys(self)
    a = {1: '小果果', 2: '棕色的', 3: '卷毛的', }
    s = a.keys()
    print(s)  # 输出 dict_keys([1, 2, 3])
    

      

    7.pop()

    删除指定的key,pop(self, k, d=None)  参数: k:待删除的key    d:指定参数,若k存在,则没吊用,如果k不存在,返回d的值

    # 语法  D.pop(k[,d]) -> v, remove specified key and return the corresponding value.
    # If key is not found, d is returned if given, otherwise KeyError is raised
    # pop(self, k, d=None)
    a = {1: '小果果', 2: '棕色的', 3: '卷毛的', }
    a.pop(1)
    print(a)  # 输出 {2: '棕色的', 3: '卷毛的'}
    

      

    8.popitem()

    随机删除一个键值对

    # 语法  D.popitem() -> (k, v), remove and return some (key, value) pair as a 2-tuple; but raise KeyError if D is empty.
    # popitem(self)
    a = {1: '小果果', 2: '棕色的', 3: '卷毛的'}
    a.popitem()
    print(a)  # 输出 {2: '棕色的', 3: '卷毛的'}
    

      

    9.setdefault()

    给字典设置(增加)新的键,存在就不设置(获取当前key对应的值),不存在就设置并返回当前key对应的值  setdefault(self, k, d=None) 参数:k:待设置(添加)的key   d:默认为空,可以指定value值

    # 语法  D.setdefault(k[,d]) -> D.get(k,d), also set D[k]=d if k not in D
    # setdefault(self, k, d=None)
    a = {1: '小果果', 2: '棕色的', 3: '卷毛的'}
    a.setdefault(4, 'ss')
    print(a)  # 输出 {1: '小果果', 2: '棕色的', 3: '卷毛的', 4: 'ss'}
    

      

     10.update()

    更新字典

    # 语法  D.update([E, ]**F) -> None
    # update(self, E=None, **F)
    a = {1: '小果果', 2: '棕色的', 3: '卷毛的'}
    b = {3: '母的', 4: '没有起床气的', 5: None}
    a.update(b)
    print(a)  # 输出 {1: '小果果', 2: '棕色的', 3: '母的', 4: '没有起床气的', 5: None}
    

      

    几点需要主义的:

    (1)如果E中的keys和D中的keys是重合的,把E中的元素覆盖到D中

    (2)E只能是字典,试了试,用其他的数据类型不可以

    (3)update()后,会根据keys的值,对字典进行排序

    11.values()

    将字典中的值以列表的形式返回,一般用于for循环,和keys()取得东西刚刚好相反。

    # 语法  D.values() -> an object providing a view on D's values
    # update(self, E=None, **F)
    a = {1: '小果果', 2: '棕色的', 3: '卷毛的'}
    print(a.values())  # 输出 dict_values(['小果果', '棕色的', '卷毛的'])
    

      

      

  • 相关阅读:
    Win10使用VMware虚拟机安装ubuntu
    算法资源清单
    JAVA Synchronized (三) volatile 与 synchronized 的比较
    JAVA Synchronized (二)
    Java多线程:线程状态以及wait(), notify(), notifyAll()
    Java中断机制
    Java throw与throws
    Java(Android)线程池
    JAVA interrupte中断线程的真正用途
    Java 守护线程
  • 原文地址:https://www.cnblogs.com/cnafzyx/p/10161585.html
Copyright © 2020-2023  润新知