这周太忙了,决算审计整天加班,上级公司年末检查,在加上家中赵女士需要参加考试,真的是没有时间,现在腾出空来,把这周学的知识总结一下。
先谈下感受把,学习真的是一件很辛苦的事,在年轻的时候感觉力量是无穷的,没啥事,干就是了,但是现在感觉有点怂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(['小果果', '棕色的', '卷毛的'])