python学习之路(基础篇)——列表,字典,集合

Posted tony8gbmy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python学习之路(基础篇)——列表,字典,集合相关的知识,希望对你有一定的参考价值。

一、列表,元组操作

定义列表

names = [Alex,"Tenglan",Eric]

查看

>>> names[0]
Alex
>>> names[2]
Eric
>>> names[-1]
Eric
>>> names[-2] #还可以倒着取
Tenglan

 切片

技术分享图片
>>> names = ["Alex","Tenglan","Eric","Rain","Tom","Amy"]
>>> names[1:4]  #取下标1至下标4之间的数字,包括1,不包括4
[Tenglan, Eric, Rain]
>>> names[1:-1] #取下标1至-1的值,不包括-1
[Tenglan, Eric, Rain, Tom]
>>> names[0:3] 
[Alex, Tenglan, Eric]
>>> names[:3] #如果是从头开始取,0可以忽略,跟上句效果一样
[Alex, Tenglan, Eric]
>>> names[3:] #如果想取最后一个,必须不能写-1,只能这么写
[Rain, Tom, Amy] 
>>> names[3:-1] #这样-1就不会被包含了
[Rain, Tom]
>>> names[0::2] #后面的2是代表,每隔一个元素,就取一个
[Alex, Eric, Tom] 
>>> names[::2] #和上句效果一样
[Alex, Eric, Tom]
View Code

追加

技术分享图片
>>> names
[Alex, Tenglan, Eric, Rain, Tom, Amy]
>>> names.append("我是新来的")
>>> names
[Alex, Tenglan, Eric, Rain, Tom, Amy, 我是新来的]
View Code

插入

技术分享图片
>>> names
[Alex, Tenglan, Eric, Rain, Tom, Amy, 我是新来的]
>>> names.insert(2,"强行从Eric前面插入")
>>> names
[Alex, Tenglan, 强行从Eric前面插入, Eric, Rain, Tom, Amy, 我是新来的]

>>> names.insert(5,"从eric后面插入试试新姿势")
>>> names
[Alex, Tenglan, 强行从Eric前面插入, Eric, Rain, 从eric后面插入试试新姿势, Tom, Amy, 我是新来的]
View Code

修改

技术分享图片
>>> names
[Alex, Tenglan, 强行从Eric前面插入, Eric, Rain, 从eric后面插入试试新姿势, Tom, Amy, 我是新来的]
>>> names[2] = "该换人了"
>>> names
[Alex, Tenglan, 该换人了, Eric, Rain, 从eric后面插入试试新姿势, Tom, Amy, 我是新来的]
View Code

删除

技术分享图片
>>> del names[2] 
>>> names
[Alex, Tenglan, Eric, Rain, 从eric后面插入试试新姿势, Tom, Amy, 我是新来的]
>>> del names[4]
>>> names
[Alex, Tenglan, Eric, Rain, Tom, Amy, 我是新来的]
>>> 
>>> names.remove("Eric") #删除指定元素
>>> names
[Alex, Tenglan, Rain, Tom, Amy, 我是新来的]
>>> names.pop() #删除列表最后一个值 
我是新来的
>>> names
[Alex, Tenglan, Rain, Tom, Amy]
View Code

扩展

技术分享图片
>>> names
[Alex, Tenglan, Rain, Tom, Amy]
>>> b = [1,2,3]
>>> names.extend(b)
>>> names
[Alex, Tenglan, Rain, Tom, Amy, 1, 2, 3]
View Code

拷贝

技术分享图片
>>> names
[Alex, Tenglan, Rain, Tom, Amy, 1, 2, 3]

>>> name_copy = names.copy()
>>> name_copy
[Alex, Tenglan, Rain, Tom, Amy, 1, 2, 3]
View Code

拷贝分为浅copy和深copy  需要import调用

如列表包含列表情况

浅copy拷贝浅层深层的列表是拷贝地址name2=copy.copy(names)

深 copy则是完整拷贝                            name2=copy.deepcopy(names)

浅copy可以用来创建联合账户

统计

技术分享图片
>>> names
[Alex, Tenglan, Amy, Tom, Amy, 1, 2, 3]
>>> names.count("Amy")
2
View Code

排序&翻转

技术分享图片
>>> names
[Alex, Tenglan, Amy, Tom, Amy, 1, 2, 3]
>>> names.sort() #排序
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unorderable types: int() < str()   #3.0里不同数据类型不能放在一起排序了,擦
>>> names[-3] = 1
>>> names[-2] = 2
>>> names[-1] = 3
>>> names
[Alex, Amy, Amy, Tenglan, Tom, 1, 2, 3]
>>> names.sort()
>>> names
[1, 2, 3, Alex, Amy, Amy, Tenglan, Tom]

>>> names.reverse() #反转
>>> names
[Tom, Tenglan, Amy, Amy, Alex, 3, 2, 1]
View Code

获取下标

技术分享图片
>>> names
[Tom, Tenglan, Amy, Amy, Alex, 3, 2, 1]
>>> names.index("Amy")
2 #只返回找到的第一个下标
View Code

元组

元组其实跟列表差不多,也是存一组数,只不是它一旦创建,便不能再修改,所以又叫只读列表

names = ("alex","jack","eric")

它只有2个方法,一个是count,一个是index,完毕。

二、字符串操作

三、字典操作

info = {
    ‘stu1101‘: "TengLan Wu",
    ‘stu1102‘: "LongZe Luola",
    ‘stu1103‘: "XiaoZe Maliya",
}

字典的特性:

  • dict是无序的
  • key必须是唯一的,so 天生去重

增加

技术分享图片
>>> info["stu1104"] = "苍井空"
>>> info
{stu1102: LongZe Luola, stu1104: 苍井空, stu1103: XiaoZe Maliya, stu1101: TengLan Wu}
View Code

修改

技术分享图片
>>> info[stu1101] = "武藤兰"
>>> info
{stu1102: LongZe Luola, stu1103: XiaoZe Maliya, stu1101: 武藤兰}
View Code

删除

技术分享图片
>>> info
{stu1102: LongZe Luola, stu1103: XiaoZe Maliya, stu1101: 武藤兰}
>>> info.pop("stu1101") #标准删除姿势
武藤兰
>>> info
{stu1102: LongZe Luola, stu1103: XiaoZe Maliya}
>>> del info[stu1103] #换个姿势删除
>>> info
{stu1102: LongZe Luola}
>>> 
>>> 
>>> 
>>> info = {stu1102: LongZe Luola, stu1103: XiaoZe Maliya}
>>> info
{stu1102: LongZe Luola, stu1103: XiaoZe Maliya} #随机删除
>>> info.popitem()
(stu1102, LongZe Luola)
>>> info
{stu1103: XiaoZe Maliya}
View Code

查找

技术分享图片
>>> info = {stu1102: LongZe Luola, stu1103: XiaoZe Maliya}
>>> 
>>> "stu1102" in info #标准用法
True
>>> info.get("stu1102")  #获取
LongZe Luola
>>> info["stu1102"] #同上,但是看下面
LongZe Luola
>>> info["stu1105"]  #如果一个key不存在,就报错,get不会,不存在只返回None
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: stu1105
View Code

多级字典嵌套与操作

技术分享图片
av_catalog = {
    "欧美":{
        "www.youporn.com": ["很多免费的,世界最大的","质量一般"],
        "www.pornhub.com": ["很多免费的,也很大","质量比yourporn高点"],
        "letmedothistoyou.com": ["多是自拍,高质量图片很多","资源不多,更新慢"],
        "x-art.com":["质量很高,真的很高","全部收费,屌比请绕过"]
    },
    "日韩":{
        "tokyo-hot":["质量怎样不清楚,个人已经不喜欢日韩范了","听说是收费的"]
    },
    "大陆":{
        "1024":["全部免费,真好,好人一生平安","服务器在国外,慢"]
    }
}

av_catalog["大陆"]["1024"][1] += ",可以用爬虫爬下来"
print(av_catalog["大陆"]["1024"])
#ouput 
[全部免费,真好,好人一生平安, 服务器在国外,慢,可以用爬虫爬下来]
View Code

其他操作

技术分享图片
#values
>>> info.values()
dict_values([LongZe Luola, XiaoZe Maliya])

#keys
>>> info.keys()
dict_keys([stu1102, stu1103])


#setdefault
>>> info.setdefault("stu1106","Alex")
Alex
>>> info
{stu1102: LongZe Luola, stu1103: XiaoZe Maliya, stu1106: Alex}
>>> info.setdefault("stu1102","龙泽萝拉")
LongZe Luola
>>> info
{stu1102: LongZe Luola, stu1103: XiaoZe Maliya, stu1106: Alex}


#update 
>>> info
{stu1102: LongZe Luola, stu1103: XiaoZe Maliya, stu1106: Alex}
>>> b = {1:2,3:4, "stu1102":"龙泽萝拉"}
>>> info.update(b)
>>> info
{stu1102: 龙泽萝拉, 1: 2, 3: 4, stu1103: XiaoZe Maliya, stu1106: Alex}

#items
info.items()
dict_items([(stu1102, 龙泽萝拉), (1, 2), (3, 4), (stu1103, XiaoZe Maliya), (stu1106, Alex)])


#通过一个列表生成默认dict,有个没办法解释的坑,少用吧这个
>>> dict.fromkeys([1,2,3],testd)
{1: testd, 2: testd, 3: testd}
View Code

字典循环

#方法1
for key in info:
    print(key,info[key])

#方法2
for k,v in info.items(): #会先把dict转成list,数据里大时莫用
    print(k,v)

四、集合操作

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

  • 去重,把一个列表变成集合,就自动去重了
  • 关系测试,测试两组数据之前的交集、差集、并集等关系

常用操作

技术分享图片
s = set([3,5,9,10])      #创建一个数值集合  
  
t = set("Hello")         #创建一个唯一字符的集合  


a = t | s          # t 和 s的并集  
  
b = t & s          # t 和 s的交集  
  
c = t – s          # 求差集(项在t中,但不在s中)  
  
d = t ^ s          # 对称差集(项在t或s中,但不会同时出现在二者中)  
  
   
  
基本操作:  
  
t.add(x)            # 添加一项  
  
s.update([10,37,42])  # 在s中添加多项  
  
   
  
使用remove()可以删除一项:  
  
t.remove(H)  
  
  
len(s)  
set 的长度  
  
x in s  
测试 x 是否是 s 的成员  
  
x not in s  
测试 x 是否不是 s 的成员  
  
s.issubset(t)  
s <= t  
测试是否 s 中的每一个元素都在 t 中  
  
s.issuperset(t)  
s >= t  
测试是否 t 中的每一个元素都在 s 中  
  
s.union(t)  
s | t  
返回一个新的 set 包含 s 和 t 中的每一个元素  
  
s.intersection(t)  
s & t  
返回一个新的 set 包含 s 和 t 中的公共元素  
  
s.difference(t)  
s - t  
返回一个新的 set 包含 s 中有但是 t 中没有的元素  
  
s.symmetric_difference(t)  
s ^ t  
返回一个新的 set 包含 s 和 t 中不重复的元素  
  
s.copy()  
返回 set “s”的一个浅复制
View Code

五、文件操作

对文件操作流程

  1. 打开文件,得到文件句柄并赋值给一个变量
  2. 通过句柄对文件进行操作
  3. 关闭文件 

基本操作

f = open(lyrics) #打开文件
first_line = f.readline()
print(first line:,first_line) #读一行
print(我是分隔线.center(50,-))
data = f.read()# 读取剩下的所有内容,文件大时不要用
print(data) #打印文件
 
f.close() #关闭文件

这种操作只能读小文件

读文件前五行

for i in range(5)
    print(f.readline())

读第五到第十

加if判断

 

 

 

 

打开文件的模式有:

  • r,只读模式(默认)。
  • w,只写模式。【不可读;不存在则创建;存在则删除内容;】
  • a,追加模式。【可读;   不存在则创建;存在则只追加内容;】

"+" 表示可以同时读写某个文件

  • r+,可读写文件。【可读;可写;可追加】
  • w+,写读
  • a+,同a

"U"表示在读取时,可以将 自动转换成 (与 r 或 r+ 模式同使用)

  • rU
  • r+U

"b"表示处理二进制文件(如:FTP发送上传ISO镜像文件,linux可忽略,windows处理二进制文件时需标注)

  • rb
  • wb
  • ab

六、字符编码与转码

 

以上是关于python学习之路(基础篇)——列表,字典,集合的主要内容,如果未能解决你的问题,请参考以下文章

Python学习之路:基础知识之推导式

python之路基础篇

python之路-基础:文件处理列表元组字典set集合

Python学习之路——Python基础之基本数据类型(列表元组和字典)

python学习之路

python学习之路