Python Learning 列表的更多操作及示例代码


Posted in Python onAugust 22, 2018

遍历列表-for循环

列表中存储的元素可能非常多,如果想一个一个的访问列表中的元素,可能是一件十分头疼的事。那有没有什么好的办法呢?当然有!使用 for循环

假如有一个食物名单列表,通过 for循环 将列表中的食物名称都打印出来

# 定义一个食物名单列表
foods = ['potato', 'tomato', 'noodles', 'apple', 'pizza']
# 循环访问foods列表
for food in foods:
  print(food)

输出:

potato  tomato  noodles  apple  pizza

for循环 将foods列表中的元素依次输出了出来

for food in foods: 这行代码表示将foods列表中的元素依次取出,每次次元素的值赋给变量food;本句代码最后以冒号结尾

print(food) 本行代码之前有四个字符的 缩进 ,表示这行代码属于 for food in foods: 的代码块

for循环每次从列表中取出一个元素后,都会进入代码块中执行一遍,即输出元素的名称;直到将列表所有的元素都遍历一次后,循环停止

# 定义一个食物名单列表
foods = ['potato', 'tomato', 'noodles', 'apple', 'pizza']
# 循环访问foods列表
for food in foods:
  print(food)
# 循环之外的代码
print('循环已经完毕')
print('循环已经完毕') 的前面没有缩进,说明它不属于for循环块中的代码;所以,当for循环完毕后,会接着执行下面的这句代码

输出:

potato

tomato

noodles

apple

pizza

循环已经完毕

其中,变量 food 是一个临时变量,可以随意取名称;不过建议取有意义的名称,在这里用foods表示食物列表,用food表示列表中的食物,方便理解

循环也可以嵌套使用

假如小明喜欢一些食物,这些食物名称被存储到foods1列表中;小红喜欢另一些食物,这些食物名称被存储到foods2中;现在想知道小明与小红所喜欢的食物是否有相同的,则可用如下方式:

# 小明喜欢的食物列表 
foods1 = ['potato', 'tomato', 'noodles', 'apple', 'pizza']
# 小红喜欢的食物列表
foods2 = ['chocolate', 'pizza', 'maize', 'watermelon']

# 通嵌套循环寻找出两个列表中相同的食物名称
for food1 in foods1:
  for food2 in foods2:
    if food1 == food2:
      print('小明和小红共同喜欢的食物是', food1)

输出:

小明和小红共同喜欢的食物是 pizza

for food2 in foods2: 前面有缩进,说明它是 for food1 in foods1: 块中的代码;第一外循环从小明喜欢的食物列表中依次取出食物名称,然后进行自身的代码块中;第二行代码依次遍历小红喜欢的食物列表,然后进行循环体(代码块),然后判断foods1中的第一个元素与foods2中的第一个元素是否一样,foods1中的第一个元素与foods2中的第二个元素是否一样,……,foods1中的第一个元素与foods2中的第四个元素是否一样,如果一样,则执行打印 print('小明和小红共同喜欢的食物是', food1) ;接着判断foods1中的第二个元素与foods2中的第1个元素是否一样,……,foods1中的第二个元素与foods2中的第四个元素是否一样,如果一样,则执行打印 print('小明和小红共同喜欢的食物是', food1) ……直到判断到foods1中的第五与foods2的所有元素比较一次后,嵌套循环执行完毕

注: if 表示判断一个结果,如果结果是真,则执行代码块,如果不是真,则跳过代码块; == 表示判断两个值是否相等,如果相等返回真,如果不相等返回假。这两个知识点将在后面进行详细探讨

在写 for 循环语句的时候,造成别忘记在后面加上 冒号 ,循环体中的代码千万别忘记添加缩进;缩进一般是一个制表符的距离,即四个空格的距离;不过,不建议将制表符与空格符混合使用

创建数值列表-range()

前面的列表中的元素都是字符串类型的,列表中可以存储任意对象,现在定义一个数值列表

numbers = [1,2,3,4,5]

如果想定义一个从1到1000的数值列表,手动将这些数值一个一个写进列表里,一点也不高效;可以使用函数 range() 快速创建一系列数字

for value in range(1,6):
  print(value)

输出:

rnage(1, 6) 会生成从1到5的数字,6表示到6的时候就停止创建动作,如果想创建1到1000的数字,则是 range(1, 1001)

通过 list() 可以将 range() 创建的数字转换成列表

# 输出range()看看
numbers = range(1,6)
print('range: ',numbers)
# 转换成列表后,再输出看看
numbers = list(numbers)
print('list: ',numbers)

输出:

range: range(1, 6)  list: [1, 2, 3, 4, 5]

可以看出, range() 返回的是一个 可迭代对象 ,经过转换后才是一个列表对象

还可以通过指定 步长 ,来生成一系列偶数

numbers = range(2,21,2)
print(list(numbers))

输出:

[2, 4, 6, 8, 10, 12, 14, 16, 18, 20]

range(start, stop[, step]) 这是Python的使用说明文档中关于 range() 的使用说明,start表示从哪个数字开始,stop表示到哪个数字停止,[, step]表示步长,方括号表示这个参数是可选的,即可写可不写

可以在Python的IDLE中输入 help(range) 来得到关于range()的帮助文档

>>> help(range)

一些简单的、常用的数字列表统计函数:

# 定义一个偶数列表
numbers = list(range(2,21,2))

# 求数值列表中最小的元素值
print(min(numbers))
# 求数值列表中最大的元素值
print(max(numbers))
# 求数值列表所有元素的和
print(sum(numbers))

输出:

列表解析

直接看下面代码

# 定义一个偶数列表
numbers = list(range(2,21,2))
squares = [value**2 for value in numbers]
print(squares)

输出:

[4, 16, 36, 64, 100, 144, 196, 256, 324, 400]

for循环的这种写法 squares = [value**2 for value in numbers] 叫做 列表解析

首先,写一对中括号,它表示一个列表;然后列表中分类两部分,第一个部分是表达式,即 value**2 ,这个表达的意思是计算一个值的乘方;第二部分是列表循环,即 for value in numbers ;最终结果是将列表中的每个值都按乘方计算一次后,放入一个列表中,再赋值给变量 squares

这里需要注意的是,循环后面没有冒号,可以理解为将循环体的代码块精简成了一个表达式

列表切片

只获取列表的部分元素,这样的操作叫作 切片

切片通过列表的索引进行操作,即从哪个索引开始,到哪个索引结果,将这段元素取出

# 定义一个食物列表
foods = ['potato', 'tomato', 'noodles', 'apple', 'pizza']

# 取出第二个元素到第四个元素
print(foods[1:4])

输出:

['tomato', 'noodles', 'apple']

foods[1:4] 方括号中的1表示索引1位置,4表示索引4位置;需要注意的是,1表示从索引1开始,而4表示到索引4就结束;也就说,索引4位置的元素不会返回;所以,这里返回的结果是从索引1到索引3的三个元素

如果省略冒号前的数字,则表示从开始的位置取值

# 从索引0开始,取到索引4之前的所有值
foods[:4]
如果省略冒号后的数字,则表示一直取到列表的末尾
# 从索引1开始,一下取到列表结束的位置
foods[1:]
如果只有冒号,表示取所有数据
# 取所有数据
foods[:]

还可能使用负数

# 从倒数3个元素开始,一直取到末尾
foods[-3:]

for循环与切片的结合

# 定义一个食物列表
foods = ['potato', 'tomato', 'noodles', 'apple', 'pizza']
# 打印第2个到第4个元素
for food in foods[1:4]:
  print(food)

输出:

tomato  noodles  apple

关于列表的复制

先来看个例子

foods1 = ['potato', 'tomato', 'noodles', 'apple', 'pizza']
foods2 = foods1
print(foods1)
print(foods2)

将foods1列表赋值给foods2列表,看似是一个复制动作,但foods1与foods2实际上是一个对象

foods1 = ['potato', 'tomato', 'noodles', 'apple', 'pizza']
foods2 = foods1
foods1.append('chocolate')
print(foods1)
print(foods2)

输出结果:

['potato', 'tomato', 'noodles', 'apple', 'pizza', 'chocolate']  ['potato', 'tomato', 'noodles', 'apple', 'pizza', 'chocolate']
因为, ['potato', 'tomato', 'noodles', 'apple', 'pizza'] 创建了一个列表对象,foods1变量与foods2变量实际存储的是指向 ['potato', 'tomato', 'noodles', 'apple', 'pizza'] 的一个引用,所以,修改foods1后,发现food2也变了

复制需要另外创建出一个一模一样的对象出来,但它们必须的确是两个对象才行

foods1 = ['potato', 'tomato', 'noodles', 'apple', 'pizza']
foods2 = foods1[:]
foods1.append('chocolate')
print(foods1)
print(foods2)

输出:

['potato', 'tomato', 'noodles', 'apple', 'pizza', 'chocolate']  ['potato', 'tomato', 'noodles', 'apple', 'pizza']
foods1[:] 返回foods1所有的元素,并创建了一个副本,这个副本是另一个对象,然后再会给了foods2,因此在更改foods1时,没有影响到副本

也可以使用 id(foods1);id(foods2) 来查看列表对象在计算机内的ID,ID不同,则不是同一个对象

简单谈一下元组

元组的使用与列表类似,不同的,列表是可改变的,而元组不是可改变的;列表用 [] 来定义,元组则使用 () 来定义

# 定义一个元组
numbers = (1,2,3,4,5)
# 支持索引访问
print(numbers[1])
# 支持循环
for number in numbers:
  print(number)  
# 不支持对元素的修改,执行下面代码会报错
numbers[0] = 11

报错内容

Traceback (most recent call last):  File "C:/Users/Administrator/Desktop/s.py", line 11, in <module>  numbers[0] = 11  TypeError: 'tuple' object does not support item assignment

下面看一段示例代码the day of python learning(列表)

列表是python中的基础数据类型之一,其他语言中也有类似于列表的数据类型,比如js中叫数组,他是以[]括起来,每个元素以逗号隔开,而且他里面可以存放各种数据类型比如:
li = [‘alex',123,Ture,(1,2,3,'wusir'),[1,2,3,'小明',],{‘name':'alex'}]
列表相比于字符串,不仅可以储存不同的数据类型,而且可以储存大量数据,32位python的限制是 536870912 个元素,64位python的限制是 1152921504606846975 个元素。而且列表是有序的,有索引值,可切片,方便取值。
# li = ['alex',[1,2,3],'wusir','egon','女神','taibai']
# l1 = li[0]
# print(l1)  #“alex‘
# l2 = li[1]  #[1,2,3]
# print(l2)
# l3 = li[0:3] #['alex', [1, 2, 3], 'wusir']
# print(l3)
li = ['alex','wusir','egon','女神','taibai']
#增加 append()  insert()
# li.append('日天')
# li.append(1)
# print(li)
# while 1:
#   username = input('>>>')
#   if username.strip().upper() == 'Q':
#     break
#   else:
#     li.append(username)
# print(li)
# li.insert(4,'春哥')
# print(li)
# li.extend('二哥')
# li.extend([1,2,3])
# print(li)
#删
li = ['taibai','alex','wusir','egon','女神',]
# name = li.pop(1) # 返回值
# name = li.pop() # 默认删除最后一个
# print(name,li)
# li.remove('taibai') # 按元素去删除
# print(li)
# li.clear() # 清空
# print(li)
# del li
# del li[0:2] # 切片去删除
# print(li)
#改
# li[0] = '男兽'
# li[0] = [1,2,3]
#切片
# li[0:3] = '云姐plfdslkmgdfjglk'
# li[0:3] = [1,2,3,'春哥','咸鱼哥']
# print(li)
#查
# for i in li:
#   print(i)
# print(li[0:2])
#公共方法:
# l = len(li)
# print(l)
# num = li.count('taibai')
# print(num)
# print(li.index('wusir'))
# li = [1,5,4,7,6,2,3]
# #正向排序
# # li.sort()
# # print(li)
# #反向排序
# # li.sort(reverse=True)
# # print(li)
# #反转
# li.reverse()
# print(li)
#列表的嵌套
li = ['taibai','武藤兰','苑昊',['alex','egon',89],23]
# print(li[1][1])
# name = li[0].capitalize()
# # print(name)
# li[0] = name
# li[0] = li[0].capitalize()
# li[2] = '苑日天'
# print(li[2].replace('昊','ritian'))
# li[2] = li[2].replace('昊','ritian')
# li[3][0] = li[3][0].upper()
# print(li)

总结

以上所述是小编给大家介绍的Python Learning 列表的更多操作及示例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
Python 字符串操作方法大全
Mar 11 Python
python实现定时播放mp3
Mar 29 Python
Python常见数字运算操作实例小结
Mar 22 Python
python3使用腾讯企业邮箱发送邮件的实例
Jun 28 Python
pytorch 固定部分参数训练的方法
Aug 17 Python
python创建学生管理系统
Nov 22 Python
python处理RSTP视频流过程解析
Jan 11 Python
Matplotlib使用字符串代替变量绘制散点图的方法
Feb 17 Python
Python下使用Trackbar实现绘图板
Oct 27 Python
Python+Opencv实现把图片、视频互转的示例
Dec 17 Python
python3列表删除大量重复元素remove()方法的问题详解
Jan 04 Python
python实现剪贴板的操作
Jul 01 Python
Python绘制的二项分布概率图示例
Aug 22 #Python
使用Python写一个量化股票提醒系统
Aug 22 #Python
Python使用numpy产生正态分布随机数的向量或矩阵操作示例
Aug 22 #Python
用Python将mysql数据导出成json的方法
Aug 21 #Python
windows下python 3.6.4安装配置图文教程
Aug 21 #Python
Python多进程与服务器并发原理及用法实例分析
Aug 21 #Python
Python socket实现的简单通信功能示例
Aug 21 #Python
You might like
使用YUI+Ant 实现JS CSS压缩
2014/09/02 PHP
php类自动加载器实现方法
2015/07/28 PHP
php版微信公众号自定义分享内容实现方法
2016/09/22 PHP
PHP ADODB生成下拉列表框功能示例
2018/05/29 PHP
Javascript中暂停功能的实现代码
2007/03/04 Javascript
用js实现的仿sohu博客更换页面风格(简单版)
2007/03/22 Javascript
js Function类型
2011/12/04 Javascript
JQuery的$和其它JS发生冲突的快速解决方法
2014/01/24 Javascript
超实用的javascript时间处理总结
2016/08/16 Javascript
JS实现快速的导航下拉菜单动画效果附源码下载
2016/11/01 Javascript
JS实现鼠标移上去显示图片或微信二维码
2016/12/14 Javascript
Vue2.0设置全局样式(less/sass和css)
2017/11/18 Javascript
如何使用electron-builder及electron-updater给项目配置自动更新
2018/12/24 Javascript
全面分析JavaScript 继承
2019/05/30 Javascript
vue封装可复用组件confirm,并绑定在vue原型上的示例
2019/10/31 Javascript
使用p5.js临摹动态图片
2019/11/04 Javascript
js实现简单图片拖拽效果
2021/02/22 Javascript
[42:22]DOTA2上海特级锦标赛C组小组赛#1 OG VS Archon第一局
2016/02/27 DOTA
详解python OpenCV学习笔记之直方图均衡化
2018/02/08 Python
对PyQt5基本窗口控件 QMainWindow的使用详解
2019/06/19 Python
python使用 request 发送表单数据操作示例
2019/09/25 Python
详解Pycharm第三方库的安装及使用方法
2020/12/29 Python
CSS3实现大小不一的粒子旋转加载动画
2016/04/21 HTML / CSS
详解如何在css3打包后自动追加前缀插件:autoprefixer
2018/12/18 HTML / CSS
HTML5 SEO优化的一些建议
2020/08/27 HTML / CSS
求职自荐书范文
2013/12/04 职场文书
中层竞聘演讲稿
2014/01/09 职场文书
公司庆典邀请函范文
2014/01/13 职场文书
办理护照介绍信
2014/01/16 职场文书
运动会开幕式解说词
2014/02/05 职场文书
交通事故协议书范文
2014/04/16 职场文书
法人委托书范本格式
2014/09/15 职场文书
教师作风整顿个人剖析材料
2014/10/10 职场文书
2014年人大工作总结
2014/12/10 职场文书
交通事故被告答辩状
2015/05/22 职场文书
go 原生http web 服务跨域restful api的写法介绍
2021/04/27 Golang