Python(三)序列类型

学习思路:通过'大量的练习'来掌握相应的知识点,培养'编程思维(思路)',并'不单纯'的讲解语法!

Python'有6个序列'的内置类型,但最'常见'的是列表('list')和元组('tulpe')

一、列表(list)、元组(tulpe)、字典(dict)

思路:各个击破、'求同存异'(分析)

(1)列表

构成:通过逗号分隔的不同的数据项使用方括号括起来构成列表!

特点:有顺序(所以可以通过索引index获取值),列表的数据项不需要具有相同的类型(存储任意类型的数据),可变的数据类型!

特性:索引(index)、切片(slice),加(连接),乘(重复),检查成员(判断)

内置:len()确定序列的长度、确定最大max()和最小的min()元素的方法(同一类型)

service = ['ftp', 'http', 'ftp', 'ssh', 'mysql']

# 通过索引值,重新赋值
service[0] = 'samba'
print(service)

# 通过切片赋值[0,1]两个-->nfs是追加的-->注意:并不需要赋值个数和元素的位置匹配!!!
service[:2] = ['mysql', 'nginx', 'nfs']
print(service)

(2)元组(tuple)

细节

    1)如果元组里面包含可变数据类型,可以间接的修改元组内容

t1 = ([1,2,3],4)
# 如果元组里面包含可变数据类型,可以间接的修改元组内容
t1[0].append(5)
print(t1

    2)元组如果只有一个元素,元素后面一定要加逗号,否则数据类型不确定(根据这个数据的类型)

t = (2,)#tuple元组类型

t = (2) #int类型

需求1:元组和列表的转换

t2=()
print(t2,type(t2))
t3=tuple([])
print(t3,type(t3))
t4=list(t3)
print(t4,type(t4))

(3)元组和列表的差异对比

          不同之处在于元组的元素不能修改(没有增删改-->没有对应的方法!)

          元组使用小括号(),列表使用方括号[]

形容数据的可变性

         列表:打了激素的数组--->增强版的元组!

         元组:带了紧箍咒的列表

二、练习

需求1:

"""
1.系统里面有多个用户,用户的信息目前保存在列表里面
    users = ['root','westos']
    passwd = ['123','456']


 - 添加用户:
    1).  判断用户是否存在?
    2).  如果存在, 报错;
    3).  如果不存在,添加用户名和密码分别到列表中;

- 删除用户
    1). 判断用户名是否存在
    2). 如果存在,删除;
    3). 如果不存在, 报错;
- 用户登陆
- 用户查看
- 退出

"""

分析:其实就是一个权限管理系统,首先必须登陆,用一个列表模拟用户名和密码的文件(数据库),登陆的时候验证,登陆之后用户进行权限的管理和查看,操作完毕就退出系统!

# (1)列表嵌套,每一个元素是用户名和密码-->模拟数据库文件!

list1 = [['root', 'westos'], ['kiosk', '456']]
# print(list1,type(list1))

# (2)登陆-->用一个死循环模拟登陆!
while True:
    # 输入用户名
    username = input('Please input your username:')
    # (2)判断用户名是否存在
    for i in list1:
        if username in i[0]:
            # 用户名存在,则判断密码是否相等!
            password = input('Please input your password:')
            # 统计次数--->后续!
            if password in i[1]:
                print('登陆成功')
                # 进入登陆之后的界面-->给三个动作
                while True:
                    operation = input('Please input your operation C[re]|D[el]|E[xit]:')
                    # (1)退出
                    if operation == 'E':
                        exit()
                    name = input('Please input the name your wanted to add|del:')
                    # 定义一个标志位-->表明是否已经有该用户了!
                    flag = 0
                    index1 = 0
                    # 遍例用户-->判断用户名是否存在
                    for i in list1:
                        if name in i[0]:
                            flag = 1
                            index1 = i
                            # 不再向后判断了!
                            break
                    # (2)创建-->说明:创建之后应该进入下一次操作
                    if operation == 'C':
                        # 判断用户是否存在-->0表示不存在
                        if flag == 0:
                            # 追加一个列表-->添加用户的信息(用户名和密码)
                            list1.append([])
                            list1[-1].append(name)
                            passd = input('Please input your password:')
                            list1[-1].append(passd)
                            print('用户创建成功')
                            print(list1)
                            continue
                        else:
                            print('Error,用户已经存在,无法创建!')
                    # (3)删除
                    elif operation == 'D':
                        if flag == 1:
                            list1.remove(index1)
                            print('删除成功')
                            print(list1)
                            continue
                        else:
                            print('Error,用户不存在,无法删除')
            else:
                #后续补充!
                print('密码不正确,还有三次机会')
        else:
            # print('输入的用户名不正确,清重新输入!')
            print('')

说明:查看模块没有写,后续完善(通过字典数据类型和函数来简化)!

需求2:元组的应用场景

a = 1
b = 2
b,a = a,b
# (1)说明:完成了封包和拆包-->两个元素互换!-->中间元组(t)
# b,a = (1,2) b=(1,2)[0] a=(1,2)[1]
print(a)
print(b)

# (2)打印变量-->等价方式(理解)-->封包
name = 'westos'
age = 11
t = (name,age)
print('name:%s,age:%d' %(name,age))
print('name:%s,age:%d' %t)

# (3)元组的赋值:有多少个元素,就用多少个变量接收-->拆包
t = ('westos',10,100)
name,age,score =t
print(name,age,score)

(2)集合-->set

# 集合里面的元素不可重复的-->即使定义时是重复的,也会去重!
s = {1,2,3,4,1,2,3,4,[1,2,3,4]}
print(s,type(s))
# 定义一个空集合
# s2 = {}
# print(s2,type(s2))

# 说明: 默认情况下是dict,所以必须强转!
# s3 = set([])
# print(s3,type(s3))

# 列表去重-->两次倒腾!
li = [1,2,3,1,2,3,4,5,6,4,5,6]
print(list(set(li)))

集合特性:只支持成员操作符!

集合的方法

# (1)集合是一个"可变"的数据类型
# (2)添加顺序和在集合中存储的顺序不同

# s = {6,7,8,9,1,2,3}
# print(s)
#
# 需求1:添加
# s.add(10)
# s.add(0)
# print(s)
#
# 需求2:增加多个元素
# s.update({3,4,5,6,7,8})
# print(s)
#
# 需求3:删除
# s.pop()
# s.pop()
# s.pop()
# print(s)
#
# 需求4:删除指定元素 元素必须要存在,否则报错!
# s.remove(100)
# print(s)

############数据分析必备(set集合)################

# 交集 并集 差集
s1 = {1,2,3}
s2 = {2,3,4}
# 并集
print('并集:',s1.union(s2))
print('并集:',s1 | s2)
# 交集
print('交集:',s1.intersection(s2))
print('交集:',s1 & s2)
# 差集
# s1和s2的差集:s1中有哪些元素s2中没有
print('差集:',s1.difference(s2))
print('差集:',s1-s2)
# s2和s1的差集
print('差集:',s2.difference(s1))
print('差集:',s2-s1)
# 对等差分:并集 - 交集
print('对等差分:',s1.symmetric_difference(s2))
print('对等差分:',s1^s2)
s3 = {'redhat','westos'}
s4 = {'redhat','westos','linux'}
# s3是否s4的子集
print(s3.issubset(s4))
# s3是否s4的超集-->与子集相反!
print(s3.issuperset(s4))
# 两个集合是不是不相交
print(s3.isdisjoint(s4))

需求2:

"""

明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性;
(1)他先用计算机生成了N个1~1000之间的随机整数(N<=1000),N是用户输入的,
(2)对于其中重复的数字,只保留一个,把其余相同的数字去掉,不同的数对应着不同的学生的学号,
(3)然后再把这些数从小到大排序,按照排好的顺序去找同学做调查,请你协助明明完成“去重”与排序工作!

"""
import random
#强转
s = set([])
for i in range(int(input('N:'))):
    s.add(random.randint(1,1000))
print(sorted(s))

说明:利用了集合自带的去重!

(4)字典

字典的创建

s = {}
# 注意1:花括号没有元素是dict类型!
print(s,type(s))

# 字典:key-value 键值对
# 说明:类似于数学上的映射-->键唯一(所以不能是可变的-->比如列表!)
s = {
    'linux':[100,99,88],
    'python':[190,56,78]
}
print(s,type(s))

# 工厂函数-->产生字典!
d = dict()
print(d,type(d))

# 创建字典对象,并初始化(key=value的形式)!
d = dict(a=1,b=2)
print(d,type(d))

# 字典的嵌套(key:value,多个key-values对以逗号分割!)

student = {
    '123':{
        'name':'tom',
        'age':18,
        'score':99
    },
    '456':{
        'name':'lily',
        'age':19,
        'score':100
    }
}

#说明:调用字典的方式-->键找值
#可以理解为:字典是列表的高级形式-->高级体现在"键"不仅仅是数字索引!
print(student['123']['name'])

字典的特性(三种)

d = {
    '1':'a',
    '2':'b'
}

print(d['1'])-->查看!

# 字典不支持切片的-->没有索引

# 成员操作符(针对key)!!!

print('1' in d)
print('1' not in d)

# for循环 针对key!!!
for key in d:
    print(key)
# 遍历字典
for key in d:
    #输出一个元组!
    print(key,d[key])

字典元素的增加

service = {
    'http':80,
    'ftp':23,
    'ssh':22
}

# 需求1:增加一个元素
# 如果key值存在,则更新对应的value值
# 如果key值不存在,则添加对应的key-value值
# 好好体会这一特性!!!

service['https'] = 443
print(service)
service['ftp'] = 21
print(service)
# 需求2:增加多个key值
service_backup = {
    'tomcat':8080,
    'mysql':3306
}

service.update(service_backup)
print(service)
# 需求3:python的Web框架形式
service.update(flask=9000,dns=53)
print(service)

# 如果key值存在:不做修改!
# 如果key值不存在:则添加对应的key-value
service.setdefault('http',9090)
print(service)
service.setdefault('oracle',44575)
print(service)

字典元素的删除

service = {
    'http':80,
    'ftp':23,
    'ssh':22
}
# del service['http']
# print(service)
"""
pop删除指定key对应的value值
如果key存在,删除,并且返回删除key对应的value(可以用变量取接收)-->有点人性!
如果不存在,直接报错
"""
# item = service.pop('https')
# print(item)
# print(service)
# popitem删除最后一个key-value值!!!
item = service.popitem()
print(item)
print(service)

# 清空字典内容
service.clear()
print(service)

字典的查看

service = {
    'http':80,
    'ftp':23,
    'ssh':22
}
# 查看字典的key值
print(service.keys())
# 查看字典的value值
print(service.values())
# 查看字典的key-value值
print(service.items())
"""
key不存在,默认返回None
key存在,default就返回defalut的值 没有就返回None

说明:与[]键找值的方式查看的区别-->[]找不到会报错!!!
"""
print(service.get('https','443'))

 

 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值