成都网站建设设计

将想法与焦点和您一起共享

python学习之列表和元组

序列

l 成员有序排列的,且可以通过下标偏移量访问到它的一个或者几个成员,这类类
型统称为序列。
l 序列数据类型包括:字符串,列表,和元组类型。
l 特点: 都支持下面的特性
l 索引与切片操作符
l 成员关系操作符(in , not in)
l 连接操作符(+) & 重复操作符(*)

成都创新互联是一家以网站建设、网页设计、品牌设计、软件运维、seo优化、小程序App开发等移动开发为一体互联网公司。已累计为成都广告推广等众行业中小客户提供优质的互联网建站和软件开发服务。

1列表

#创建一个空列表
li = []
print(li, type(li))
#列表(打了激素的数组): 可以存储任意数据类型的集和。
li = [1, 1.2, 2e+10, True, 2+3j, 'hello', [1, 2, 3]]
print(li, type(li))

#列表的特性: index, slice, in/not in, 连接, 重复

print(li[2])    # 2e+10
print(li[-1])   # [1, 2, 3]
print(li[1:4])  # [1.2, 2e+10, True]
print(li[:4])   # [1, 1.2, 2e+10, True], 获取列表的前4个元素
print(li[2:])   # [2e+10, True, 2+3j, 'hello', [1, 2, 3]], 获取除了前2个元素之外的其他元素
print(li[:])    # 列表的拷贝
print(li[::-1]) # 列表的反转
#嵌套索引
print(li[-1])  # [1, 2, 3]
print(li[-1][0])    # 1

print(1 in li)      # True
print(1 not in li)  # False

print([1, 2, 3] + [3, 4, 5])    # [1, 2, 3, 3, 4, 5]
print([1]*10)                   # [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
#字符串是不可变的数据类型, 列表是可变的数据类型
"""
s = 'hello'
print(id(s))
s[0] = 'a'
print(s)
s = 'westos'
print(s)
"""

li = [1, 2, 3, 4]
print("更改之前的id:", id(li))
li[0] = 100
print("更改之后的id:", id(li))
print(li)

2列表的增删改查

#*************************增*******************************************
li = [1, 2, 3, 4]
li.append(7)
print(li)

li.insert(0, 'python')
print(li)

li.extend([6, 7, 8, 9])
print(li)

#*******************改***********************************************
li[0] = 'python language'
print(li)

li[:2] = [1, 2]
print(li)

#*************************查**************************************
print(li.index(1))
print(li.count(1))

#**************************删**********************************
li.remove(1)
print(li)

delete_item = li.pop()
print(delete_item, li)

del li[0]
del li[:2]
print(li)

li.clear()
print(li)

#*******************************其它***************************************
import random
li = list(range(10))
random.shuffle(li)
print(li)

li1 = li.copy()
print(li, li1)

li.reverse()
print(li)

li.sort()
print(li)

总结
python学习之列表和元组

3元组

1). 定义空元组 tuple = ()
2). 定义单个值的元组 tuple = (fentiao,)
3). 一般的元组 tuple = (fentiao, 8, male)
元组
元组的创建,删除及特性

li = [1, 2, 3, 4]
print(li, type(li))

#元组的定义
tuple = (1, 2, 3, 4)
print(tuple, type(tuple))

#定义空元组
none_tuple = ()
print(none_tuple, type(none_tuple))

#(*********)定义只有一个元素的元组
one_item_tuple = (1, )
print(one_item_tuple, type(one_item_tuple))

#元组和列表类似, 可以存储任意数据类型的数据。 列表是可变数据类型(是否有增删改的内置方法), 元组是不可变数据类型.
many_items_tuple = (1, 2.897, 34e-9, True, [1, 2, 3, 4], (1, 2, 3, 4))
print(many_items_tuple, type(many_items_tuple))

#************************元组的特性***************************************
t = (1, 2, 3, 4, 5, 6)
#索引和切片
print(t[0])  # 1
print(t[-1])    # 6
print(t[:2])    # (1, 2)
print(t[:-1])   # (1, 2, 3, 4, 5)
print(t[2:])    # (3, 4, 5, 6)

#成员操作符
print(1 in t)
print(1 not in t)

#重复和连接
print((1, 2, 3) + (1, ))
print((1, 2) * 3)

#*****************元组的内置方法**************************************
t = [1, 2, 3, 1, 2, 3]
print(t.index(1))
print(t.count(1))
特性:
连接&重复操作符、成员操作符、索引&切片
元组是不可变数据类型,不能对元组的值任意更改;
t.count(value)-->int 返回value在元组中出现的次数;
t.index(value)

返回value在元组中的偏移量(即索引值)元组
元组赋值应用
特性1: 对元组分别赋值,引申对多个变量也可通过元组方式分别赋值
name, age, gender = 'fentiao', 10, 'male'
print(name, age, gender)

#小范例: 去掉最高分和最低分, 求平均得分

scores = [98, 67, 78, 99, 100]
scores.sort()
#*scores在python3中可以使用, 在python2中不可以使用。
low_score, *other_scores, high_score = scores
print("最低分: ", low_score)
print("最高分: ", high_score)
print("平均分列表: ", other_scores)
print("平均分: ", round(sum(other_scores) / len(other_scores), 2))

#特性2: 变量交换
x = 2; y = 3
x, y = y, x
print(x, y)

#特性3: print打印
print("name: %s, age:%d, gender: %s" %('fentiao', 10, 'male'))
t = ('fentiao', 10, 'male')
print("name: %s, age:%d, gender: %s" %(t[0], t[1], t[2]))
print("name: %s, age:%d, gender: %s" %t)

命名元组

from datetime import  datetime
today = datetime.today()
print(today)

import time
struct_time = time.localtime()
print(struct_time.tm_yday)
print(struct_time.tm_year)

t = (2019, 12, 1)
print(t[0])
print(t[1])
print(t[2])

"""
#从collections模块中导入namedtuple命名元组类
from collections import namedtuple
#创建一个类, 类名为AccountInfo ,元组里面包含两列信息, 分别是'name', 'password'
AccountInfo = namedtuple('AccountInfo', ['name', 'password'])
#实例化对象
root_account = AccountInfo('root','westos')
print(root_account.name)
print(root_account.password)

#类属性 _fields:包含这个类所有字段名的元组
print(root_account._fields)

is和==的区别

问题: is和==两种运算符在应用上的本质区别是什么?
1). Python中对象的三个基本要素,分别是:id(身份标识)、type(数据类型)和value(值)。
2). is和==都是对对象进行比较判断作用的,但对对象比较判断的内容并不相同。
3). ==用来比较判断两个对象的value(值)是否相等;(type和value)
is也被叫做同一性运算符, 会判断id是否相同;(id, type 和value)

深拷贝和浅拷贝

浅拷贝: 对另外一个变量的内存地址的拷贝,这两个变量指向同一个内存地址的变量值。(li.copy(), copy.copy())
•公用一个值;
•这两个变量的内存地址一样;
•对其中一个变量的值改变,另外一个变量的值也会改变;
深拷贝: 一个变量对另外一个变量的值拷贝。(copy.deepcopy())
•两个变量的内存地址不同;
•两个变量各有自己的值,且互不影响;
•对其任意一个变量的值的改变不会影响另外一个;

项目背景:

腾讯云服务器 CVM(Cloud Virtual Machine)是腾讯云提供的可扩展的计算服务。
使用 CVM 避免了使用传统服务器时需要预估资源用量及前期投入,帮助您在短时间内快速启动任意
数量的云服务器并即时部署应用程序。腾讯云 CVM 支持用户自定义一切资源:CPU、内存、硬盘、
网络、安全等等,并可以在需求发生变化时轻松地调整它们。

需求:


***************云主机管理系统 ****************
******************************************
        1). 添加云主机
        2). 删除云主机
        3). 修改云主机
        4). 查看云主机
        0). 退出系统

******************************************

云主机的属性信息:
id: 递增,主机id
IPv4: 主机IP
disk: 主机硬盘大小
memory: 主机内存大小
name: 主机别名

"""
from collections import namedtuple

#云主机管理系统菜单栏提示
from prettytable import PrettyTable

prompt = """


***************云主机管理系统 ***************  
******************************************     
        1). 添加云主机
        2). 删除云主机
        3). 修改云主机
        4). 查看云主机
        0). 退出系统

用户请选择操作:         
******************************************

"""

#1). 选择那种数据类型存储云主机信息? str, tuple, list, 选择列表
hosts_db = []   # 存储所有主机信息的数据库列表
id = 0          # 云主机的id号, 是依次递增的
#通过命名元组定义主机需要存储的信息
Host = namedtuple('Host', ['id', 'IPv4', 'disk', 'memory', 'name'])

#2). 死循环,接收用户选择
while True:
    choice = input(prompt)
    #如果用户选择为1, 则添加云主机
    if choice == '1':
        print("添加云主机".center(40, '*'))
        id += 1     # id递增
        IPv4 = input('主机IP(eg:172.25.254.197)>> ')
        disk = input('主机硬盘大小(eg: 500G)>> ')
        memory = input('主机内存大小(eg: 4G)>> ')
        name = input('主机别名(eg: 数据库服务器)>> ')
        #将主机信息实例化为Host对象, 并添加到主机信息的数据库列表中
        hosts_db.append(Host(id=id, IPv4=IPv4, disk=disk, memory=memory, name=name))
        #显示添加成功的信息
        print("添加主机%s成功" %(name))
    elif choice == '2':
        print("删除云主机".center(40, '*'))
        delete_id = int(input('要删除主机的id(eg:1)>> '))
        for host in hosts_db:
            if host.id == delete_id:
                hosts_db.remove(host)
                print("删除id=%s的云主机成功" %(delete_id))
                break
        else:
            print("没有找到id=%s的云主机,删除失败" %(delete_id))
    elif choice == '3':
        #如果我们的目标是定义一个高效的数据结构,而且将来会修改各种实例属性,那么使用 namedtuple 并不是最佳选择
        #修改云主机暂时不处理
        pass
    elif choice == '4':
        print("查看云主机".center(40, '*'))
        #创建表并指定表头信息和格式
        hosts_table = PrettyTable(field_names=['Id', "IPv4", 'Disk', 'Memory', 'Name'])
        ##遍历主机信息
        for host in hosts_db:
            # 按行添加数据
            hosts_table.add_row(host)
        #打印表格
        print(hosts_table)
    elif choice == '0':
        exit(0)
    else:
        print("请输入正确的选项")

拓展_prettyTable

#PrettyTable 是python中的一个第三方库,可用来生成美观的ASCII格式的表格:
from prettytable import PrettyTable
#要显示的主机信息

db = [
    [1, '1.1.1.1', '500G', '4G', 'Mariadb Server'],
    [2, '1.1.1.2', '200G', '8G', 'Web Server'],
]
#创建表并指定表头信息和格式
hosts_table = PrettyTable(field_names=['Id',"IPv4", 'Disk', 'Memory', 'Name'])
#遍历主机信息
for host in db:
    #按行添加数据
    hosts_table.add_row(host)
#打印表格
print(hosts_table)

网站标题:python学习之列表和元组
浏览地址:http://chengdu.cdxwcx.cn/article/piedci.html