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()