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的curses库使用教程
Apr 11 Python
详解Python迭代和迭代器
Mar 28 Python
Python爬取网易云音乐热门评论
Mar 31 Python
python构建自定义回调函数详解
Jun 20 Python
Mac下Anaconda的安装和使用教程
Nov 29 Python
python里运用私有属性和方法总结
Jul 08 Python
Python逐行读取文件内容的方法总结
Feb 14 Python
python爬虫学习笔记之pyquery模块基本用法详解
Apr 09 Python
基于Tensorflow一维卷积用法详解
May 22 Python
Python RabbitMQ实现简单的进程间通信示例
Jul 02 Python
pycharm激活方法到2099年(激活流程)
Sep 22 Python
python自动统计zabbix系统监控覆盖率的示例代码
Apr 03 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
解决控件遮挡问题:关于有窗口元素和无窗口元素
2007/01/28 PHP
谷歌音乐搜索栏的提示功能php修正代码
2011/05/09 PHP
thinkphp判断访客为手机端或PC端的方法
2014/11/24 PHP
php版微信公众平台开发之验证步骤实例详解
2016/09/23 PHP
ThinkPHP使用getlist方法实现数据搜索功能示例
2017/05/08 PHP
详解PHP使用日期时间处理器Carbon人性化显示时间
2017/08/10 PHP
支持汉转拼和拼音分词的PHP中文工具类ChineseUtil
2018/02/23 PHP
Prototype中dom对象方法汇总
2008/09/17 Javascript
js判断当页面无法回退时关闭网页否则就history.go(-1)
2014/08/07 Javascript
浅谈 javascript 事件处理
2015/01/04 Javascript
javascript中setInterval的用法
2015/07/19 Javascript
详解Angular2中的编程对象Observable
2016/09/17 Javascript
nodejs的HTML分析利器node-jquery用法浅析
2016/11/08 NodeJs
详解angularjs的数组传参方式的简单实现
2017/07/28 Javascript
动态统计当前输入内容的字节、字符数的实例详解
2017/10/27 Javascript
vue better-scroll插件使用详解
2018/01/25 Javascript
微信小程序实现基于三元运算验证手机号/姓名功能示例
2019/01/19 Javascript
基于Vue全局组件与局部组件的区别说明
2020/08/11 Javascript
原生js实现贪吃蛇游戏
2020/10/26 Javascript
解决Python中由于logging模块误用导致的内存泄露
2015/04/23 Python
numpy找出array中的最大值,最小值实例
2018/04/03 Python
python opencv3实现人脸识别(windows)
2018/05/25 Python
详解python使用pip安装第三方库(工具包)速度慢、超时、失败的解决方案
2018/12/02 Python
python实现网站用户名密码自动登录功能
2019/08/09 Python
Django restful framework生成API文档过程详解
2020/11/12 Python
Html5画布_动力节点Java学院整理
2017/07/13 HTML / CSS
加拿大鞋子连锁店:Town Shoes
2016/09/26 全球购物
化学实验员岗位职责
2013/12/28 职场文书
人民教师的自我评价分享
2014/02/21 职场文书
怎么写好自荐书
2014/03/02 职场文书
小学庆六一活动总结
2014/08/28 职场文书
劳模事迹材料范文
2014/12/24 职场文书
爱晚亭导游词
2015/02/09 职场文书
小公司融资,商业计划书的8切记
2019/07/15 职场文书
不知如何爱孩子,这些方法教会您
2019/08/06 职场文书
Django程序的优化技巧
2021/04/29 Python