#_date_:2020/9/11

'''
列表和字典是python中用的最多的数据类型 假如要存储一个班级的人名,需要怎么做?
有这么几种方法:
1.定义很多个变量:
name0 = 'wucaho'
name1 = 'jinxin'
name2 = 'sanpang'
name3 = 'ligang'
缺点:会开辟很多内存,并且各变量之间没有关联

2.定义一个变量,把所有的名字放在这一个变量中:
names = 'wuchao jinxin sanpang ligang'
缺点:无法取值,对其中的元素没有办法进行增、删、改、查

以上两种方法都有不足,为了解决这种场景,python创建了一种存储多个值的方法,这个方法就叫   列表

a = []  写一个中括号,赋值给变量a,就已经创建了一个列表,列表中可以存很多元素,用逗号隔开
因此:
a = ['wuchao','jinxin','xiaohu','sanpang','ligang']
里面的元素下标依次是0,1,2,3,4

'''

#学习列表的增、删、改、查

#1.查
a = ['wuchao','sanpang','jinxin','ligang','xiaohu']
print(a[3])
print(a[1]) #方括号中的数字就是索引
#取出多个值 切片
print(a[1:3]) #切片的取值方法是:顾头不顾尾,冒号前面的值可以取到,后面的值取不到
#如果我想去最后一个值,要怎么操作
print(a[1:]) #切片中要取到最后一个元素,就是1:,冒号后面不写任何值(针对不知道元素个数的情况)
print(a[1:-1]) #-1表示,取到最后一个值的前面一个值
print(a[1:4:2]) #最后一个数字表示步长,表示跳着取值;如果不写最后一个值,默认步长为1,从左到右依次取值
print(a[1::2])
print(a[3::-2]) #先取ligang,再取sanpang,调换位置,步长设置为负数即可,负数代表从右往左取值
print(a[-2::-1])
print("haidilao" in a) #in查找某个值是否在列表中
#2.增
#涉及到两个添加方法:append、insert
#append 会把值放入到列表的最后一项
#insert 可以把数据插入到具体的位置
append
a = ['wuchao','sanpang','jinxin','ligang','xiaohu']
a.append('xuepeng') #append 中跟的是要添加到列表中的值
print(a) insert
a = ['wuchao','sanpang','jinxin','ligang','xiaohu']
a.insert(1,'xuepeng')
print(a)
#3.改
a = ['wuchao','sanpang','jinxin','ligang','xiaohu']
a[1] = 'haidilao'
print(a) a[1:3] = ['zhangsan','lisi'] #通过切片修改某几个值
print(a)
#4.删除
#remove,pop,del
# remove
a = ['wuchao','sanpang','jinxin','ligang','xiaohu']
a.remove('jinxin')
print((a)) # pop 可以返回被删除的值,如果被删除的值后面要用,可以用pop
a = ['wuchao','sanpang','jinxin','ligang','xiaohu']
b = a.pop(1) #pop可以返回被删除的值
print(a)
print(b) # del 可以删除任何值
a = ['wuchao','sanpang','jinxin','ligang','xiaohu']
del a[0]
print(a)
#学习列表的其他方法
#5.count方法
#计算元素出现的次数
t = ['to','be','or','not','to','be'].count('to')
print(t)
#6.extend方法
#可以在列表的末尾一次性追加另一个序列中的多个值
a = [1,2,3]
b = [4,5,6]
a.extend(b)
print(a)
print(b)
#7.index方法   根据内容找位置
#查找列表中某个值的索引值,如果有两个相同的值,则取第一个值的索引
a = ['wuchao','sanpang','jinxin','ligang','jinxin','xiaohu']
#如果非要取相同值的位置,则需要对列表进行切片
first_jx_index = a.index("jinxin") #先取出第一个jinxin 的位置 little_list = a[first_jx_index+1:] #从第一个jinxin后面的位置对大列表进行切片 second_jx_index = little_list.index("jinxin") #小列表中jinxin的位置 second_jx_in_big_list_index = first_jx_index + second_jx_index+1 #确定jinxin在大列表中的位置
print("second_jx_in_big_list_index",second_jx_in_big_list_index) print("second jx:",a[second_jx_in_big_list_index])
#8.reverse方法  反转列表中各元素的位置,没有返回值
a = ['wuchao','sanpang','jinxin','ligang','jinxin','xiaohu']
a.reverse()
print(a)
#9.sort排序
x = [4,1,2,6,9,8,5]
x.sort(reverse=True)
print(x)
#如果元素是英文,按照ASCII码进行排序
a = ['wuchao','sanpang','jinxin','Ligang','jinxin','Xiaohu']
a.sort()
print(a)
#10.身份判断
a = ['wuchao','sanpang','jinxin','ligang','jinxin','xiaohu']
print(type(a) is list)

作业:写一个购物车程序

安排:

#创建一个商品列表
product_list = [
('mac',9000),
('iphone',6000),
('tesla',300000),
('python book',102),
('keyboard',600),
('bike',2000)
]
#创建一个变量,存储个人存款
saving = input("Please input your money:")
shopping_car = [] #定义一个空列表,用来存储买到的商品
#判断输入的存款是否是数字
if saving.isdigit():
saving = int(saving)
#由于产品列表要不断的出现,因此使用while循环
while True:
#利用for循环和enumerate枚举打印产品列表
for i,v in enumerate(product_list,1):
print(i,".",v)
#定义一个变量,存储用户输入的商品序号
choice = input("Please input your choice(quit:q):")
#判断输入的是否为数字,如果是十足,则将choice转换为int类型,进行下一步操作
if choice.isdigit():
choice = int(choice)
#判断choice的大小,choice必须大于0,并且小于等于列表的长度
if 0 < choice <= len(product_list):
#定义一个变量,存储选中的商品
p_item = product_list[choice-1] #choice为商品序号,比商品的索引值大1
#对p_item中的金额和用户输入的金额作对比
if p_item[1] <= saving:
saving -= p_item[1]
shopping_car.append(p_item)
print("you buy:%s"%p_item[0])
else:
print("you have not enough money!")
else:
print("the number that you input is too big!")
#如果输入的是q,则打印退出
elif choice == "q":
print("--------------you bought these products------------------")
for n in shopping_car:
print(n)
print("you have %s yuan "%saving)
break
# 如果输入的不是数字,打印“输入不合法字样”
else:
print("choice is invalid!")
else:
print("your saving is invalid input!")

我的Python自学之路-001 列表的知识的更多相关文章

  1. 我的Python自学之路-003 字符串的知识

    '''字符串是以引号或者单引号括起来的任意文本,例如"123","asdfjk",'adfa'引号或者单引号,只是一种表示方法,并不是字符串的一部分如果字符串本 ...

  2. 我的Python自学之路-002 字典的知识

    '''字典是python中唯一的验证类型,采用键值对(key-value)的形式存储数据.python对key进行哈希函数运算.根据计算的结果决定value的存储地址.所以字典是无序存储的.且key必 ...

  3. Python自学之路---Day13

    目录 Python自学之路---Day13 常用的三个方法 匹配单个字符 边界匹配 数量匹配 逻辑与分组 编译正则表达式 其他方法 Python自学之路---Day13 常用的三个方法 1.re.ma ...

  4. Python自学之路---Day01

    目录 Python自学之路---Day01 注释 单行注释 多行注释 print()函数 语法 参数 实例 input()函数 语法 参数 实例 查看Python的关键字 代码 变量与常量 变量 如何 ...

  5. python 自学之路-Day Two

    Day1补充部分 模块初识 模块就是由其他人写好的功能,在程序需要的时候进行导入,直接使用,也叫库. 库有标准库和第三方库,所谓标准库,就是不需要安装就可以直接使用的,自带的:第三方库,就是需要进行下 ...

  6. python 自学之路-Day one

    一.Python介绍 创始人吉多范罗苏姆(龟叔),脚本解释程序 应用领域广,数据分析.组件集成.网络服务.图像处理.数值计算和科学计算等. 主要应用领域: 云计算:OpenStack: WEB开发:经 ...

  7. python学习之路04——列表和字典

    列表和字典 python中的可变数据类型有:列表和字典 不可变类型:数字,字符串,元组 今天先讲列表和字典 一.列表 1.概念: 变量:使用变量存储数据,但是,变量存储数据每次只能存储一个数据 问题: ...

  8. Python学习之路2 - 列表和元组

    列表 概念:Python内置的一种数据类型是列表:list.list是一种有序的集合,可以随时添加和删除其中的元素. 列表的使用 names = ['zhangsan','lisi','wangwu' ...

  9. Python自学之路

    2020年春节,受新型冠状病毒影响,整个春节假期,全国人民都在恐慌之中,为了避免大家上班相互传染,公司号召国家政策,开始上班日期延迟,在家呆的实在太无聊,突然感觉自己不能浪费这美好的时光,决定学习Py ...

随机推荐

  1. 【算法•日更•第四十三期】QQ for linux

    废话不多说,直接看一张图: 没错,这是QQ,但是这有什么稀奇的?但是在Linux上使用QQ就很稀奇了. 众所周知,腾讯早就已经对Linux下的QQ和微信停止了服务,即便是网页版也不能用,通信这一直是小 ...

  2. Sqlalchemy 事件监听与初始化

    sqlalchemy不仅仅能自动创建数据库,更提供了其他更强大的功能,今天要介绍的就是sqlalchemy中的事件监听,并将其应用到数据库的初始化中. 需求:当插入设置password字段时,自动加密 ...

  3. python读文件出现错误解决方法

    python读文件经常会出现 UnicodeDecodeError: 'gbk' codec can't decode byte 0xbd in position 764: illegal multi ...

  4. 小白式DPDK搭建方法(附相关错误得处理方法)

    搭建环境:VM VM搭建参考其他博客 步骤一 点击虚拟机设置,添加两个网卡(我这里都是使用的都是桥接模式) 步骤二.从网上下载dpdk的压缩包: 命令:wget http://fast.dpdk.or ...

  5. 牛客网PAT练兵场-旧键盘打字

    题目地址:https://www.nowcoder.com/pat/6/problem/4059 题解:用数组下标标记,直接模拟 /** * *作者:Ycute *时间:2019-12-01-21.3 ...

  6. Arduboy基本用法(一)

    Arduboy基本用法(一) 一.第一个Arduboy程序 在arduino中新建项目 示例代码 #include<Arduboy.h> Arduboy arduboy; void set ...

  7. Linux磁盘分区、挂载、查看文件大小

    快速查看系统文件大小命令 du -ah --max-depth=1 后面可以添加文件目录 ,如果不添加默认当前目录. 下面进入正题~~ 磁盘分区.挂载 引言: ①.分区的方式 a)mbr分区: 最多支 ...

  8. IDEA下Maven项目搭建踩坑记----2.项目编译之后 在service层运行时找不到 com.dao.CarDao

    项目写的差不多 想运行一下,然后发现运行到Service层的时候报错说找不到Dao层文件 ,纠结半天之后看了下编译好的项目文件,发现mapper文件下边是空的, 于是就百度找一下原因,结果说是IDEA ...

  9. Java面试题(JVM篇)

    JVM 194.说一下 jvm 的主要组成部分?及其作用? 类加载器(ClassLoader) 运行时数据区(Runtime Data Area) 执行引擎(Execution Engine) 本地库 ...

  10. oa项目面试准备

    熟悉项目在ssm框架下的编程流程,了解mysql html spring springmvc mybatis技术.了解过springboot编程. 在上个寒假跟着培训机构用springboot框架编写 ...