Python学习笔记--3.Python内置数据结构之列表与元组


前言

本章主要介绍python中的序列、列表和元组的使用和区别,学习比较is和==,深拷贝和浅拷贝的特点与区别。


一、列表

1.序列

成员有序排列的,且可以通过下标偏移量访问到它的一个或多个成员,这类类型统称为序列。
序列数据类型包括:字符串,列表和元组类型。
特点:都支持以下特性

  • 索引与切片操作符
  • 成员关系符(in,not in)
  • 连接操作符(+)& 重复操作符(-)

补充:
字符串是不可变的
序列是可被索引的 10是序列吗? 不是 不能被索引或切片


2.列表的定义和增删查改

数组: 存储同一个数据类型的集和。num=[1,2,33]
列表:可以存储任意数据类型的集和

创建列表:
在这里插入图片描述
列表中的元素可以是任意类型
在这里插入图片描述
列表的索引与切片(与字符串类似):
在这里插入图片描述
列表的添加:

list.append()	每次添加一个元素

在这里插入图片描述

list.extend(['linux','hello'])		拉伸列表

在这里插入图片描述

list.insert(0,'hello')		指定索引位置添加

在这里插入图片描述

列表的修改:重新赋值
在这里插入图片描述
列表的查看:

list.index()		查找某个列表元素的索引位置
list.count()		查找莫个列表元素的出现次数

在这里插入图片描述
列表的删除:

list.remove()	删除列表中的指定元素
list.pop()		根据元素的索引值进行删除制定元素
list.clear		晴空列表里面的所有元素

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


二、元组定义、创建、删除及特性

定义空元组:

t = ()
print(t,type(t))

在这里插入图片描述
一般元组定义:

t = ('haha','hello',18,'westos')
print(t,type(t))

在这里插入图片描述
元组特性(类比字符串):
连接操作符、重复操作符、成员操作符、索引&引片
注:元组是不可变数据类型,不能对元组进行增删改查。


三、命名元组

from collections import namedtuple
User = namedtuple('User', ('name', 'age', 'city'))
user1 = User('westos',18,"xi'an")
user2 = User('linux',20,"beijing")
print(user1.name)
print(user1.age)
print(user1.city)

在这里插入图片描述


四、is 和 == 的区别

Python中的对象的三个基本要素,分别是:id(身份标识)、type(数据类型)和value(值)。

is和==都是对对象进行比较判断作用的,但对对象比较判断的内容并不相同。

==用来比较判断两个对象的value(值)是否相等;(type和value)
is也被叫做同一性运算符,会判断id是否相同;(id、type和value)

ls = ['123456']
ls1 = ls.copy()
if ls == ls1:
    print("==")
if ls is ls1:
    print("is")

在这里插入图片描述


五、深拷贝和浅拷贝

简而言之,浅copy不copy值

浅copy 只copy列表中元素的内存地址 id会改变 但不改变嵌套列表,修改原文件,拷贝文件会改变。
深copy 也会copy列表中的元素的内存地址和值 id会改变,嵌套列表也会改变,修改源文件,拷贝文件不会改变。

浅copy:

ls.copy()
copy.copy()

在这里插入图片描述
深copy:

ls1 = copy.deepcopy(ls)

在这里插入图片描述


笔记补充

ctrl + alt + l 规范当前代码

列表排序:

li.reverse()
li.sort(reverse=True)
sorted 
print(sorted(li,reverse=True))

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

命名元组不能与extend配合使用

实例:
虚拟机管理系统(框架)
需求:
输入1 ---- 添加受控虚拟机
输入2 ---- 检索虚拟机
输入3 ---- 删除虚拟机
输入4 ---- 列出受控虚拟机
输入5 ---- 退出程序

参考答案

from collections import namedtuple
from prettytable import PrettyTable
menu = '''
                    vm host manage system
                    1). add vm host
                    2). search vm host
                    3). remove vm host
                    4). list vm host
                    5). exit system
Please input you choice: '''

hosts = []
Host = namedtuple('Host', ('id', 'ip', 'name'))
id = 0

while True:
    choice = input(menu)
    if choice == '1':
        print('add vm host'.center(50, '*'))
        ip = input('Please input add host ip: ')
        name = input('Please input add host name: ')
        host = Host(id, ip, name)
        hosts.append(host)
        id += 1
        print('add successfully!')
        print(hosts)

    elif choice == '2':
        print('search vm host'.center(50, '*'))
        searchname = input('Please input search host name: ')
        # for host in hosts:
        #     if searchname in host:
        #         print(host.name)
        for i in hosts:
            if searchname == str(i[2]):
                print(i)

    elif choice == '3':
        print('remove vm host'.center(50, '*'))
        removename = input('Please input remove host name: ')
        removestar = 0
        for i in hosts:
            if removename == str(i[2]):
                del hosts[removestar]
                print('remove successfully!')
                removestar += 1

    elif choice == '4':
        print('list vm host'.center(50, '*'))
        hosts_table = PrettyTable(field_names=['ID', 'IP', 'HOSTNAME'])
        for host in hosts:
            if host.name == search_name:
                hosts_table.add_row(host)
        print(hosts_table)
        # print('all vm hosts: ')
        # for i in range(len(hosts)):
        #     print(f'id={hosts[i][0]},ip={hosts[i][1]},name={hosts[i][2]}')
    else:
        print('exit system')
        exit()

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值