Python基础笔记2

@time 2019/12/17 12:04

一、列表

1、增加数据:append、insert方法
names = ["兰陵王", "孙悟空", "小乔", "李元芳", "上官婉儿", "王昭君"]
name = "后羿"
names.append(name)  # 在列表后追加数据
names.append("后羿")  # 两种写法都可以
print(names)
names.insert(2, "大乔")  # 在列表中指定下标位置前插入数据
print(names)
2、删除数据
del names[0]  # 删除下标为0的数据
print(names)
names.pop()  # 不带参数默认删除最后一个数据
print(names)
names.pop(1)  # 删除下标为1的数据
print(names)
names.remove("王昭君")
###### 3、修改数据
names[2] = "高渐离"  # 直接重新赋值
names.reverse()  # 把列表调转顺序
print(names)
4、查询数据,数据切片
index = names.index("孙悟空")  # 查询某一个数据的下标
print(index)

print(names[2])  # 打印指定下标数据
print(names[:2])  # 打印前两个即下标0、1
print(names[2:])  # 打印下标2及以后的
print(names[1:3])  # 打印1、2两个下标,规则是左闭右开,即顾头不顾尾
print(names[-1])  # 打印最后一个
print(names[-2:])  # 打印最后两个
print(names[0:-1:2])  # 0和-1可以省略 步长切片
print(names[::2])

nu = names.count("后羿")  # 统计数据后羿的个数
print(nu)
print(names)

names.sort()  # 排序,以中文开头的貌似不能排序

names2 = ["孙尚香", "达摩"]
names.extend(names2)  # 把names2加到names后边
5、深浅copy
names3 = ["兰陵王", "孙悟空", ["小乔", "李元芳"], "上官婉儿", "王昭君"]
names4 = names3.copy()  # 把names3拷贝一份,但是列表中还有一个小列表,如果修改了小列表元素,names3和names4中小列表元素都会变化
                        # 小列表中copy的是地址值
names3[2][0] = "大乔"
print(names3)
print(names4)

二、元组

定义:元组跟列表类似,也是存一组数据,但是元组一旦创建不能修改,只能读取,用小括号表示

names = ("程咬金", "后羿")
names.count("程咬金")
print(names.index("后羿"))
print(names[0])

三、字典

定义:字典是另一种可变容器模型,且可存储任意类型对象。
字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中

dict = {"李白": "20", "程咬金": "40", }
# 1、增加数据
dict["孙尚香"] = "18"
print(dict)
# 2、删除数据
# del dict["孙尚香"]  # 两种方式都可以
# dict.pop("李白")
print(dict)
# 3、修改数据
dict["孙尚香"] = "20"
# 4、查询数据
print(dict.get("程咬金"))  # 有数据回返回指,没有会反馈none
print(dict["程咬金"])   # 没有数据会报错,建议用第一种方法
print("程咬金" in dict)  # 判断字典中是否包含数据,有则返回true没有反馈false
# 5、其他常用方法
print(dict.values())  # 打印所有值
print(dict.keys())  # 打印所有key
dict.setdefault("后羿", "60")  # 该方法是先到字典中找后羿的值,如果有就返回,没有就新增,默认值是60
print(dict)

dict2 = {"程咬金": "10", "牛魔王": "80"}
dict.update(dict2)  # 更新dict,把dict2合并到dict,有相同key就换成新的,没有相同的就添加一个
print(dict)
print(dict.items())  # 把字典转换成列表

# 字典的遍历
for i in dict:
    print(i, dict[i])
# 或者
for k, v in dict.items():
    print(k, v)
# 总结:第一种方式处理更加高效,因为第二种方法要把字典转成列表,转换过程中如果数据量比较大会比较耗费时间,建议用第一种

四、集合

集合定义:是一个无序的、不重复的数据组合,主要作用如下

  1. 去重,把列表变成集合,就自动去重了
  2. 关系测试,测试两组数据之间的交集、并集、差集等关系
list1 = [1, 3, 4, 6, 3, 6]
gathering = set(list1)  # 转为集合,自动去重
print(gathering)
# 集合交集
gathering2 = set([2, 4, 6, 3])
print(gathering.intersection(gathering2))
# 集合并集(也是去重的)
print(gathering.union(gathering2))
# 集合差集,gathering中有的,gathering2中没有的
print(gathering.difference(gathering2))
# 子集
gathering.issubset(gathering2)

# 增加
gathering.add("888")  # 添加一个
gathering.update("22", "33")  # 添加多个
# 删除
gathering.pop()
gathering.remove("00")  # 删除指定的元素,没有则报错
gathering.discard("00")  # 删除指定元素,没有不会报错

五、字符串的操作

str1 = "  when nothing  	 seems to 
help   "
print(str1.count('e'))  # 统计字符串中e的个数
print(str1.capitalize())  # 将字符串第一个字母大写
print(str1.center(30, "-"))  # 打印30个字符,把字符串放中间,不够的用‘-’补充
print(str1.encode())  # 把字符串编码
print(str.endswith(str1, "help"))  # 判断字符串是否是以'help'结尾,为真则反回true
print("when {name} is {die}".format(name='lilei', die=11))  # 格式化字符串
print(str1.find('to'))  # 查找'to'在字符串中的内存位置
print(str1.isdigit())   # 判断字符串是否是数字
print(str1.islower)   # 判断字符串是否全是小写字母
print(str1.isupper())
print("-".join(str1))  # 将序列中的元素以指定的字符连接生成一个新的字符串

str2 = "qewrfdgghh"
str3 = '1234567890'
table = str.maketrans(str2, str3)   # 创建字符映射转换表
print(str1.translate(table))

print(str1.replace('to', 'ot'))  # 字符串的替换
print(str1.split('t'))  # 字符串的切片,‘t’作为分隔符
print(str1.strip())  # 用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列,注意:该方法只能删除开头或是结尾的字符,不能                       删除中间部分的字符。
str1.translate(table)  # table -- 字符映射转换表表,是通过 maketrans() 方法转换而来的

六、文件操作

"""
文件读写的几种模式:
    1、w是只写不能读
        f = open("test.txt", "w")
        f.write("123456")
    2、r是只读模式,不能写
        f = open("test.txt", "r")
        print(f.read())
    3、a 是追加写入模式
        f = open("test.txt", "a")
        f.write("
write")  # 加
是要写入内容换行
    4、a+ 追加读写
    5、w+ 写读
    6、r+ 读写
    7、rb 二进制读
    8、wb 二进制写

总结:
    1、完整的的写法
        f = open("文件名", "打开方式", encoding="编码,不写默认是utf-8")  # f是作为一个对象,后续调用方法来进行使用
    2、支持写的模式都只能在文件末尾写入,不可以在文件中插入写入
"""
# f = open("test.txt", "r", encoding="utf-8")
# 1、print(f.read())  # read()方法是读所有
# 2、print(f.readline())  # 一行行读,写一次只打印一行
'''
for i in range(5):
    print(f.readline())  #可以用循环的方式来取到前五行
'''

# 3、f.readlines() 是一个列表,可以用循环方式取出每一行
'''
# 第一种
for index, line in enumerate(f.readlines()):
    print(index, line.strip())  #strip是去除两遍空行
# 第二种,这种效率高,建议用这种
for line in f:
    print(line)
'''
# 4、f.tell() 返回一个数字,当前读到什么位置了,是以字符来计数的
'''
print(f.tell())  # 在文件开头,返回的是0
print(f.readline())
print(f.tell())  # 读取了一行的位置
'''
# 5、f.seek(数字) 回到数字的位置
'''
print(f.readline()) 
f.seek(0)  # 回到文件开头
'''
# 6、f.encoding 返回使用的编码
# 7、f.name() 返回文件名
# 8、f.flush()强制刷新,把缓存的内容写到硬盘,可见"进度条.py"
# 9、f.truncate(数字)  从开头截断数字的长度
'''
需求:把test.txt中‘不要小看我’,改为‘就要小看你’,并写入到test1.txt中
'''
f1 = open("test.txt", 'r', encoding='utf-8')
f2 = open('test1.txt', 'w', encoding='utf-8')
for line in f1:
    if "不要小看我" in line:
        line = line.replace('不要小看我 别问我有几两重', '就要小看你')
    f2.write(line)
f1.close()
f2.close()
# 或者用with语句,在执行完代码之后会自动关闭文件
with open("test.txt", 'r', encoding='utf-8') as f3,
     open("test.txt", 'r', encoding='utf-8') as f4:
    for line in f3:
        if "不要小看我" in line:
            line = line.replace('不要小看我 别问我有几两重', '就要小看你')
        f4.write(line)


When nothing seems to help, I go look at a stonecutter hammering away at his rock, perhaps a hundred times without as much as a crack showing in it. Yet at the hundred and first blow it will split in two, and I know it was not that blow that did it, but all that had gone before. -- Jacob Riis
原文地址:https://www.cnblogs.com/xhwy-1234/p/12079055.html