Python之路-(列表、元组、字典、集合、字符串)

一、列表

序列是Python中最基本的数据结构。序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推。

Python有6个序列的内置类型,但最常见的是列表和元组。

序列都可以进行的操作包括索引,切片,加,乘,检查成员。

此外,Python已经内置确定序列的长度以及确定最大和最小的元素的方法。

列表是最常用的Python数据类型,它可以作为一个方括号内的逗号分隔值出现。

列表的数据项不需要具有相同的类型

 #取值、切片

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

print (names)                #取所有列值
print (names[0],names[2])    #取值
print (names[0:3])           #切片,第一个值至第三个值
print (names[:3])            #0不写默认是0,切片,第一个值至第三个值
print (names[-1])            #取最后的值或者倒数第一个-2就是倒数第二个
print (names[-3:-1])         #倒数从左往右取值,顾首不顾尾

#添加、插入、修改、删除、查找、统计

#添加
names.append("xiaqi")        #在最后面添加一个值
#插入
names.insert(1,"caoba")      #在1的后面插入一个值,一定要输入在哪个值后面插入
#修改
names[2] ="xiaowang"         #在下标为2修改值,根据下标修改值
#删除
1、根据值删除
names.remove("caoba") 
2、根据下标删除
del names[1]
3、删除最后一个
names.pop()    #删除最后一个,输出下标就删除下标 跟这个一样 del names[-1]
#查找下标
print(names.index("zhangsan"))           #找值的下标
print(names [names.index("zhangsan")] )  # 查找下标后打印下标内容
#统计
print(names.count("chenliu"))            #统计相同的值数量

#清空列表、翻转列表、排序列表、扩展列表

#清空列表
names.clear() 
#翻转列表
number=[1,2,3,4,5,1,1]
number.reverse()
print(number)
[1, 1, 5, 4, 3, 2, 1]
#排序列表
number=[1,2,3,4,5,1,1]
number.sort()
#扩展列表
names2 = [1,2,3,4]
names.extend(names2)

#浅复制列表

names=['zhangsan','lisi','wangwu']
names2 = names.copy()
print(names)
print(names2)
['zhangsan', 'lisi', 'wangwu']
['zhangsan', 'lisi', 'wangwu']

names=['zhangsan','lisi','wangwu',['jonny']]
names2 = names.copy()
print(names)
print(names2)
['zhangsan', 'lisi', 'wangwu', ['jonny']]
['zhangsan', 'lisi', 'wangwu', ['jonny']]

names[2] = '王五'
names [3] [0] = 'JONNY'
print(names)
print(names2)   #name2 只复制第一层的列表,不会复制第二层列表,也就是子列表
 
['zhangsan', 'lisi', '王五', ['JONNY']]     #names 修改的是第二层,然后wangwu变成了中文也是第二层
['zhangsan', 'lisi', 'wangwu', ['JONNY']]   #但是names2是复制第一层,所以第一层是没有中文的王五,而jonny被改成了大写也是因为不复制,第二层也就是子列表。


浅复制的三种方式:
import copy
person=['name',['a',100]]

p1=copy.copy(person)
p2=person[:]
p3=list(person)

#深复制列表

import copy
names=['zhangsan','lisi','wangwu',['jonny']]
names2 = copy.deepcopy(names)
print(names)
print(names2)
names[2] = '王五'
names [3] [0] = 'JONNY'
print(names)
print(names2)

['zhangsan', 'lisi', 'wangwu', ['jonny']]
['zhangsan', 'lisi', 'wangwu', ['jonny']]
['zhangsan', 'lisi', '王五', ['JONNY']]
['zhangsan', 'lisi', 'wangwu', ['jonny']]

 

二、元组

元组与列表类似,元组一旦创建即不可修改。

元组使用小括号,列表使用方括号。

元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可。

Names=('name','jonny')

只有两种方法:

1、index 查找下标

2、count 统计

 

三、字典

字典是另一种可变容器模型,且可存储任意类型对象。

字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 ,

键必须是唯一的,但值则不必。

值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组。

#创建一个新字典,同时赋值。

c = dict.fromkeys([6,7,8],[1,{'name':'alex'},444])   
print(c)
c[7][1]['name']='Jack Chen'   #会直接修改连接地址,所有name值全部都会修改。
print(c)
{8: [1, {'name': 'alex'}, 444], 6: [1, {'name': 'alex'}, 444], 7: [1, {'name': 'alex'}, 444]}
{8: [1, {'name': 'Jack Chen'}, 444], 6: [1, {'name': 'Jack Chen'}, 444], 7: [1, {'name': 'Jack Chen'}, 444]}

#修改、查、删除

#修改,存在则修改,不存在则创建
info = {
    'stu1101': 'zhang san',
    'stu1102': 'li si',
    'stu1103': 'wang wu',
}
b = {
    'stu1101': 'xiaxia',   #对应info的key stu1101值不一样,则被修改
    1:3,    #无对应key 则新增
    4:2     #无对应key 则新增
}
info.update(b)   #修改info字典,对应的key有值就修改,无则新增
print(info)
{1: 3, 'stu1101': 'xiaxia', 4: 2, 'stu1102': 'li si', 'stu1103': 'wang wu'}
#
print(info.get('stu1101'))  #如果没有该key 则返回None。
print(info['stu1101'])      #直接打印key的值
#删除1
del info['stu1101']
#删除2
info.pop('stu1104')
#随机删除
info.popitem() #随机删除一个元素

#多级嵌套

school = {
    "大学":{
        "www.nanjingdaxue.com": ["做夢吧","要求分数高"],
        "www.zhongshandaxue.com": ["醒醒吧","要求分数高"],
        "qinghuadaxue.com": ["不可能的","要求分数高"],
        "beijingdaxue.com":["难进","要求分数高"]
    },
    "高中":{
        "sihui":["轻松","收费低"]
    },
    "初中":{
        "weizheng":["容易","免费"]
    }
}
#修改
school['高中']['sihui'][1] = '毫不費力' 
#只打印key 
print(school.keys())
#只打印值
print(school.values())
#嵌套循环打印
for  i in school:
    print(i,school[i])

#字典转换列表

#把字典转换为列表
print(info.items())  
#字典转列表然后再循环
for k,v in info.items():
    print(k,v)

四、集合

集合(set)是一个无序不重复元素的序列。

基本功能是进行成员关系测试和删除重复元素。

可以使用大括号({})或者 set()函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。

list_1 = [1,1,3,4,5,6]
list_1 = set(list_1)
#打印类型
print(list_1,type(list_1))  
list_2 = set([2,3,4,7,9]) 
print(list_2)
print(list_1,list_2)
#交集 .intersection 
print(list_1.intersection(list_2))  #取出交集
#并集 .union
print(list_1.union(list_2))         #去重合并
#差集 .difference
print(list_1.difference(list_2))    #保留list_1里面有的list_2里面没有的
#子集 .issubset
list_3 = set([1,3,4])
print(list_3.issubset(list_1))      #list_1 包含list_3 的所有值,则返回Ture
print(list_1.issuperset(list_3))    # 返回Flase
#对称差集 .symmetric_difference
print(list_1.symmetric_difference(list_2))   #把相互都没有的值取出来
#对比是否有交集,没有为True,有则False
list_4 = set([5,6,7])
print(list_3.isdisjoint(list_4))    #没有交集为True
集合符号:
#交集
print(list_2 & list_3)
#并集
print(list_2 | list_3)
#求差集
print(list_2 - list_3)
#对称差集
print(list_2 ^ list_3)
#添加
list_1.add(999)
print(list_1)
#添加多项
list_4.update([888,999,111])
#删除一项
list_4.remove(999)
#集合长度
print(len(list_4))
#判断是不是成员
print(111 in list_4)
#列表、字典、字符串、集合、元组判断是不是成员都是用in
print(list_1.pop()) #任意删除一个
list_1.discard('4') #删除,没返回

 五、字符串

字符串是 Python 中最常用的数据类型。我们可以使用引号('或")来创建字符串。

name = "my name is jonny, 22 years old this year"

#字符串首字母大写
print(name.capitalize())
My name is jonny, 22 years old this year
#统计字符
print(name.count('a'))  
3
#打印50个字符不够用-补充,把字符串放在中间
print(name.center(50,'-'))
-----my name is jonny, 22 years old this year-----
#是否以year结尾
print(name.endswith('year'))
True
#\t Tab转空格
name = "my \tname is jonny, 22 years old this year"
print(name.expandtabs(tabsize=30))  #Tab转30个空格
my                            name is jonny, 22 years old this year
#字符串切片
print(name[name.find('name'):])     #以name.find查找name的下标开始切片。
name is jonny, 22 years old this year
#字符串修改
name = "my name is {name}, {age} years old this year"
print(name.format(name='jonny',age=22))
my name is jonny, 22 years old this year
#使用字典进行修改
name = "my name is {name}, {age} years old this year"
print(name.format_map({'name':'jonny','age':22}))
my name is jonny, 22 years old this year
#判断是不是阿拉伯数字
name = "my name is jonny, 22 years old this year"
print(name.isalnum())
print('123456'.isalnum())  #数字
print('jonny22'.isalnum()) #字母和数字
False
True
True
#纯英文字符 包含大写
print('Jonny'.isalpha())  
True
#是不是十进制
print('10'.isdecimal())  
True
#是不是整数
print('9'.isdigit())  
True
#是不是合法的变量名标识符
print('var'.isidentifier())  
True
#是不是小写
print('lower'.islower())    
True
#是不是数字
print('123'.isnumeric())    
True
#是不是空格
print(' '.isspace())  
True
#是不是每个首字母都是大写
print('My Name Is Jonny'.istitle()) 
True
#是不是可以打印的
print('print'.isprintable())  
True
#是不是大写
print('A'.isupper()) 
True
#是不是以字符串开头
print('Jonny'.startswith('Jon')) 
True
#合并字符
print('+'.join(['1','2','3']))  
1+2+3

name = "my name is jonny 22 years old this year"
#打印50字符,不够用@往右补充
print(name.ljust(50,'@')) 
my name is jonny 22 years old this year@@@@@@@@@@@
#打印50字符,不够用@往前补充
print(name.rjust(50,'@')) 
@@@@@@@@@@@my name is jonny 22 years old this year
#大写改为小写
print('AAA'.lower()) 
aaa
#小写改为大写
print('aaa'.upper()) 
AAA
#从左边去除空格回车
print('\nJonny'.lstrip())
Jonny
#从右边去除空格回车
print('Jonny\n'.rstrip())
Jonny
#去除左右空格
print('    Jonny   '.strip())
Jonny 
#指定去除左右字符
name = '****Jonny*****'  
print(name.strip('*'))  
Jonny
#打印字符串对应上面的字符串
p = str.maketrans('JddnooykL','123456789')   
print('Jonny Luo'.translate(p))
16447 9u6
#字符串替换
print('Jonny Luo'.replace('L','l'))  
Jonny luo
#找到最右边的值的下标
print('Jonny Luo'.rfind('L'))  
6
#把字符串按照空格分成列表,l当作分隔符
print('Jonny Luo '.split('L')) 
['Jonny ', 'uo ']
#按照换行符来分成列表
print('Jonny \nLuo'.splitlines()) 
['Jonny ', 'Luo']
#大写改为小写,小写改为大写
print('Jonny Luo'.swapcase())  
jONNY lUO
#每个首字母变大写
print('jonny luo'.title())  
Jonny Luo
#打印50个字符,不够用0补充
print('jonny'.zfill(50))  
000000000000000000000000000000000000000000000jonny

 

 

 

 

 

 

posted @ 2016-11-15 12:41  罗小艺  阅读(565)  评论(0编辑  收藏  举报