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与人工神经网络:使用神经网络识别手写图像介绍
Dec 19 Python
Python中GIL的使用详解
Oct 03 Python
使用 Python 清理收藏夹里已失效的网站
Dec 03 Python
python集合删除多种方法详解
Feb 10 Python
Python守护进程实现过程详解
Feb 10 Python
浅析python表达式4+0.5值的数据类型
Feb 26 Python
Python *args和**kwargs用法实例解析
Mar 02 Python
Python爬虫实例——scrapy框架爬取拉勾网招聘信息
Jul 14 Python
linux mint中搜狗输入法导致pycharm卡死的问题
Oct 28 Python
python报错TypeError: ‘NoneType‘ object is not subscriptable的解决方法
Nov 05 Python
关于 Python json中load和loads区别
Nov 07 Python
python接口测试返回数据为字典取值方式
Feb 12 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
用php来检测proxy
2006/10/09 PHP
用php实现的下载css文件中的图片的代码
2010/02/08 PHP
PHP 网站修改默认访问文件的nginx配置
2017/05/27 PHP
in.js 一个轻量级的JavaScript颗粒化模块加载和依赖关系管理解决方案
2011/07/26 Javascript
javascript的offset、client、scroll使用方法详解
2012/12/25 Javascript
js添加table的行和列 具体实现方法
2013/07/22 Javascript
调用DOM对象的focus使文本框获得焦点
2014/02/19 Javascript
Javascript的闭包详解
2014/12/26 Javascript
浅谈Cookie的生命周期问题
2016/08/02 Javascript
js实现弹窗居中的简单实例
2016/10/09 Javascript
关于javascript获取内联样式与嵌入式样式的实例
2017/06/01 Javascript
JS+canvas动态绘制饼图的方法示例
2017/09/12 Javascript
浅谈Vue render函数在ElementUi中的应用
2018/09/06 Javascript
js实现鼠标拖拽div左右滑动
2020/01/15 Javascript
Vue列表如何实现滚动到指定位置样式改变效果
2020/05/09 Javascript
[30:55]完美世界DOTA2联赛PWL S2 Magma vs LBZS 第二场 11.18
2020/11/18 DOTA
Python的Flask框架中集成CKeditor富文本编辑器的教程
2016/06/13 Python
python下读取公私钥做加解密实例详解
2017/03/29 Python
python与sqlite3实现解密chrome cookie实例代码
2018/01/20 Python
基于python 二维数组及画图的实例详解
2018/04/03 Python
flask框架实现连接sqlite3数据库的方法分析
2018/07/16 Python
详解Python给照片换底色(蓝底换红底)
2019/03/22 Python
Django 接收Post请求数据,并保存到数据库的实现方法
2019/07/12 Python
Python可以实现栈的结构吗
2020/05/27 Python
聊聊python中的循环遍历
2020/09/07 Python
详解CSS3+JS完美实现放大镜模式
2020/12/03 HTML / CSS
基于IE10/HTML5 开发
2013/04/22 HTML / CSS
京东港澳售:京东直邮港澳台
2018/01/31 全球购物
制药工程专业应届生求职信
2013/09/24 职场文书
合伙协议书
2014/04/23 职场文书
高中教师考核方案
2014/05/18 职场文书
擅自离岗检讨书
2014/09/12 职场文书
护士医德医风自我评价
2014/09/15 职场文书
优秀共产党员主要事迹材料
2015/11/05 职场文书
“爱眼护眼,提前预防近视”倡议书3篇
2019/10/30 职场文书
Nginx本地目录映射实现代码实例
2021/03/31 Servers