Python基础2 列表、字典、集合

1、列表

#1.1 切片

names = ["zhangsan","lisi","wangwu","zhuqi"]

print(names[0],names[2]) #取第1个和第3个
print(names[0:3])   # 切片 取前三个
print(names[:3])    # 切片 取前三个

print(names[-1])    #取最后一个
print(names[-3:-1]) #切片 取倒数第3和倒数第2个
print(names[-3:])   #切片 取倒数1,2,3

print(names[0:-1:2])   #切片 步长为2
 
#1.2插入

names = ["zhangsan","lisi","wangwu","zhuqi"]

names.append("新加入成员")       #追加到最后
names.insert(2,"insert插入")    #插入到2这个位置其他后移
#1.3修改

names = ["zhangsan","lisi","wangwu","zhuqi"]

names[1] = "bobo"  #将第二个成员改为bobo
#1.4删除

names = ["zhangsan","lisi","wangwu","zhuqi","wangba"]

del names[1]            #删除下标为1的成员
names.remove("wangwu")  #删除指定成员,无返回
names.pop()             #删除最后一个,返回删除成员
names.pop(1)            #删除下标为1的成员


print(names)
#1.5 获取元素位置

names = ["zhangsan","lisi","wangwu","zhuqi","wangba"]

names.index("lisi") #返回1
#1.6 扩展
>>> names = ["zhangsan","lisi","wangwu","zhuqi","wangba"]
>>> names2 = [1,2,3]
>>> names.extend(names2)
>>> names
['zhangsan', 'lisi', 'wangwu', 'zhuqi', 'wangba', 1, 2, 3]

 

#1.7 排序
>>> names = ["zhangsan","lisi","wangwu","zhuqi","wangba"]
>>> names2 = [3,5,4,2,1]
>>> names.sort(reverse=True)   #降序
>>> names2.sort()              #升序,默认reverse=False    
>>> names
['zhuqi', 'zhangsan', 'wangwu', 'wangba', 'lisi']
>>> names2
[1, 2, 3, 4, 5]
#1.8 copy 浅copy和深copy
>>> names = ["zhangsan","lisi","wangwu",[1,2,3],"zhuqi"]
>>> names2 = names.copy()  #等同names2=names[:] 或 names2 = copy.copy(names)或 names2 = list(names) 浅copy
>>> names
['zhangsan', 'lisi', 'wangwu', [1, 2, 3], 'zhuqi']
>>> names2
['zhangsan', 'lisi', 'wangwu', [1, 2, 3], 'zhuqi']
>>> names[2]="香蕉"
>>> names[3][0]="苹果"
>>> names
['zhangsan', 'lisi', '香蕉', ['苹果', 2, 3], 'zhuqi']
>>> names2
['zhangsan', 'lisi', 'wangwu', ['苹果', 2, 3], 'zhuqi']

#深copy 完全独立
import copy
names = ["zhangsan","lisi","wangwu",[1,2,3],"zhuqi","wangba"]
names2 = copy.deepcopy(names)
print(names)
print(names2)
names[2]="香蕉"
names[3][0] = "苹果"
print(names)
print(names2)
#1.9 count函数
>>> names = ["zhangsan","lisi","lisi"]
>>> names.count("lisi")
2

 

#1.10 列表条件选择
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

l = [i for i in a if i%2==1]

print(l)

 

2、元组

一旦创建,便不能再修改,可以理解成只读列表

>>> names = ("zhangsan","lisi","wangwu")
>>> names[0]
'zhangsan'
>>> names.index("lisi")
1
>>> names.count("wangwu")
1
>>>

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

 

3、字典

字典一种key:value 的数据类型

语法:

>>> dict={"s1":"zhangsan","s2":"lisi","s3":"wangwu"} #创建
>>> dict
{'s1': 'zhangsan', 's2': 'lisi', 's3': 'wangwu'}
>>> dict["s2"]                                     #查看
'lisi'
>>>s2 in dict
>>>True
>>>dict.get("s2")
>>>"lisi" >>> dict["s2"]="wangba" #修改 >>> dict {'s1': 'zhangsan', 's2': 'wangba', 's3': 'wangwu'} >>> dict["s4"]="new_s" #增加 >>> dict {'s1': 'zhangsan', 's2': 'wangba', 's3': 'wangwu', 's4': 'new_s'} >>> del dict["s1"] #删除 >>> dict {'s2': 'wangba', 's3': 'wangwu', 's4': 'new_s'} >>> dict.pop("s2") #删除 'wangba' >>> dict {'s3': 'wangwu', 's4': 'new_s'}

字典循环

info = {
    's1': "zhangsan",
    's2': "lisi",
    's3': "wangwu",
}
for key in info:                   #建议
    print(key,info[key])

for k,v in info.items():        #不建议,效率低
    print(k,v)

 4、集合

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

  去重,把一个列表变成集合,就自动去重了

  关系测试,测试两组数据之前的交集、差集、并集等关系

>>> s = set([3,5,9,10])
>>> s
{9, 10, 3, 5}
>>> t = set("Hello")
>>> t
{'l', 'H', 'o', 'e'}
#基本操作
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')   #无该项会报错
t.discard('H') #无该项pass 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”的一个浅复制

五、文件操作

 

#读写基本操作

f = open("file1",'r+',encoding="utf-8") #文件句柄 f.write("CCCCCC\n") f.write("DDDDDD\n") # for i in range(5): #低效 # print(f.readline()) # # for line in f.readlines(): #低效 # print(line.strip()) #最高效方法,忘记其他 for line in f: print(line.strip()) f.close()

 

 

 

 

打开文件的模式有:

r,只读模式(默认)。
w,只写模式。【不可读;不存在则创建;存在则删除内容;】
a,追加模式。【可读;   不存在则创建;存在则只追加内容;】
"+" 表示可以同时读写某个文件

r+,可读写文件。【可读;可写;可追加】
w+,写读
a+,同a
"U"表示在读取时,可以将 \r \n \r\n自动转换成 \n (与 r 或 r+ 模式同使用)

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

rb
wb
ab

6、字符编码与转码

需知:

1.在python2默认编码是ASCII, python3里默认是unicode

2.unicode 分为 utf-32(占4个字节),utf-16(占两个字节),utf-8(占1-4个字节), so utf-16就是现在最常用的unicode版本, 不过在文件里存的还是utf-8,因为utf8省空间

3.在py3中encode,在转码的同时还会把string 变成bytes类型,decode在解码的同时还会把bytes变回string

 

import sys
print(sys.getdefaultencoding())


msg = "我爱北京天安门"
#msg_gb2312 = msg.decode("utf-8").encode("gb2312")
msg_gb2312 = msg.encode("gb2312") #默认就是unicode,不用再decode
gb2312_to_unicode = msg_gb2312.decode("gb2312")
gb2312_to_utf8 = msg_gb2312.decode("gb2312").encode("utf-8")

print(msg)
print(msg_gb2312)
print(gb2312_to_unicode)
print(gb2312_to_utf8)

 

 

posted @ 2019-04-25 02:24  星海航行  阅读(427)  评论(0)    收藏  举报