中间讲集合之前,我自己看了下课程里面讲的循环以及选择语句,就没有再写东西记录。中间看了下有个条件表达式的语法还是要看一下的,python中的条件表达式语法是:
语句1 if 条件 else 语句2
例如:
sex = "男" if sexinfo == "male" else sex = "女"
其中,老师友情提醒了下,一个短路逻辑,当有多个条件要进行判断是,把复杂的条件放在后,因为判断是从前向后进行判断的,如果符合条件就会直接返回不会再进行复杂的判断而节约时间。
字符串
- 字符串的创建
①直接创建
string_name1 = ""
②格式化字符串
string_name1 = "张三"
string_greet = "欢迎光临,%s"%(string_name1)
print(string_greet)
- 字符串的存储原理
因为内存的使用是连贯的,所以字符串的修改,系统只能在后面重新申请一块连续的内存把修改(拼接也是)后的字符串放进去,所以一定不是在原字符串的那块内存里修改。这个也是因为字符串是不可变类型的原因,因为字符串的存储原理决定原存储单元不可变。
(ps:参考网上一名答主的话:是否为可变类型在于内存单元的值是否可以被改变。如果是内存单元的值不可改变的,在对对象本身操作的时候,必须在内存的另外地方再申请一块内存单元(因为老的内存单元不可变),老的内存单元就丢弃了(如果还有其他ref,则ref数字减1,类似unix下的hard-link);如果是可变的,对对象操作的时候,不需要再在其他地方申请内存,只需要在此对象后面连续申请(+/-)即可,也就是它的地址会保持不变,但区域会变长或者变短。) - 字符串的截取
①使用索引
string01 = "i miss u"
print(string01[0])
print(string01[2])
输出结果为:i 和 m
②使用切片
string01 = "i want to kiss u"
print(string01[0:1])
print(string01[0:])
print(string01[:])
print(string01[::-1])
输出结果为:
i
i want to kiss u
i want to kiss u
u ssik ot tnaw i
- 字符串的增加
①直接使用算数运算符" + "进行拼接
②使用append方法进行追加 - 字符串的删除
没有现成的删除元素方法,转换思路,要么转成列表使用pop弹出方法后再转回字符串,要么用replace("")把要删除的字符串换成空字符串 - 字符串的修改
str.replace方法 - 字符串的查找
str.find() - 字符串的遍历
使用for循环或者while循环配合索引来遍历。
str01 = "123456789"
for(int i = 0; i < str01.len(); i++)
print(str01[i])
另外,字符串封装的方法很多,没有难点平时可以自行百度查阅,此处不做记录。
列表
- 列表的存储原理
列表的简单描述其实就是一个指针数组,在一块连续的内存里存着一串指针指向其他位置的引用。列表是可变的,当目前列表不够用时,其自动扩充。 - 列表的创建
list_temp = [] - 列表的增加
list.append()、 list.insert()、 list.extend() - 列表的删除
list.remove()、list.pop()、list.clear()、del - 列表的修改
#索引赋值
li = [1,2,3,5,'cat',2,3,4,5,'bye']
li[3]='monkey'
print(li)
#结果为:[1, 2, 3, 'monkey', 'cat', 2, 3, 4, 5, 'bye']
#***********************************************************
#分片赋值
s[0:2] = ‘ ’ #分片赋值
li = [1,2,3,5,'cat',2,3,4,5,'bye']
li[0:2]=('a')
print(li)
#结果为:['a', 3, 5, 'cat', 2, 3, 4, 5, 'bye']
- 列表的查找
索引或者切片,注意每次切片返回的是一个新的列表,而且列表的切片是浅拷贝。 - 列表的遍历
各种循环。。大同小异
元组:
元组的数据不能被修改,其他使用和列表一样
字典
- 字典的存储原理
字典对象的核心是散列表.散列表是一个稀疏数组(总是有空白元素的数组)。python中的字典底层依靠哈希表(hash table)实现, 使用开放寻址法解决冲突,这也要求字典的key必须可hash。字典在内存中开销巨大,典型的空间换时间,因为总有空白元素,但是键值对的方式查询速度很快。另外要注意的是不能在遍历字典的时候去修改字典,因为如果遍历期间去增加元素可能导致扩容,字典会新创建一个更大的数组将原来的元素复制进去,但是因为字典是无序的,就会导致元素次序发生变化从而导致发生错误(容量接近 2/3 时,数组就会扩容。)。
python会根据散列表的拥挤程度扩容。“扩容”指的是:创造更大的数组,将原有内容 拷贝到新数组中。
键一般是唯一的,如果重复最后的一个键值对会替换前面的,值不需要唯一 - 字典的创建
#1.空字典
dic = {}
#2.直接赋值
dic01 = {"ID":001,"Num":23,"Age":18,"Weight":50}
dic02 = ( ID = 001, Num = 23, Age = 3)
#3.通过二元列表
list_source = [("name",tom),("age",13),("class",5)]
dic = dict(list)
#4.通过dict.fromkeys()创建
dic03 = dict.fromkeys(range(3), 'x') #通常用来设置默认值
#5.通过字典推导式创建
dic = {i:2*i for i in range(3)} #{0: 0, 1: 2, 2: 4}
#6.dict和zip结合创建
dic = dict(zip('abc', [1, 2, 3])) #{'a': 1, 'c': 3, 'b': 2}
- 字典的增加
list_source = [("name",tom),("age",13),("class",5)]
dic = dict(list)
dic["school"] = "第三小学" #会检查字典中有没有此key,有则更新值没有则添加
- 字典的删除
#1.删除元素
list_source = [("name",tom),("age",13),("class",5)]
dic = dict(list)
del dic["name"] #删除key为name的键值对
del dic #删除整个字典
- 字典的修改
同列表的增加 - 字典的查找
可以用has 或者 遍历 - 字典的遍历
for循环遍历
字符串、列表、元组、字典的对比
列表推导式:
#构建一个1-10000的列表
list_temp = [i for i in range(1,11)]
#构建一个与字符串格式化的列表展示1-1000
list_temp = [f"第{i}名观众" for i in range(1,10000)]
#构建一个与字符串格式化的列表展示1-1000,只含有偶数名
list_temp = [f"第{i}名观众" for i in range(1,10000) if i%2 == 0]
#元组推导式与列表推导式类似,只是修改[]为()
#字典推导式外面的[]应该修改为{}
#列表推导式的嵌套:
list01 = ["香蕉","苹果","哈密瓜"]
list02 = ["可乐","牛奶"]
list03 = []
for r in list01:
for c in list02:
list03.append(r+c)
list04 = [r+c for r in list01 for c in list02]
print(list03)
#下面看一个例子:
#合并大小写的值
mcase = {'a': 10, 'b': 34, 'A': 7, 'Z': 3}
mcase_frequency = {
k.lower(): mcase.get(k.lower(), 0) + mcase.get(k.upper(), 0)
for k in mcase.keys()
if k.lower() in ['a','b']
}
print mcase_frequency
# Output: {'a': 17, 'b': 34}
#快速交换key和value
mcase = {'a': 10, 'b': 34}
mcase_frequency = {v: k for k, v in mcase.items()}
print mcase_frequency
# Output: {10: 'a', 34: 'b'}