资讯专栏INFORMATION COLUMN

Python学习之路3-操作列表

makeFoxPlay / 2890人阅读

摘要:本章内容主要是对列表的进一步操作,以及初识元组数据结构。列表非常适合用于存储在程序运行期间可能变化的数据集,列表可以被修改。代码结果相比于列表,元组是更简单的数据结构。

《Python编程:从入门到实践》笔记。
本章内容主要是对列表的进一步操作,以及初识元组数据结构。
1. 遍历列表

本章主要是for循环:

# 代码:
magicians = ["alice", "david", "carolina"]
for magician in magicians:
    print(magician.title() + ", that was a great trick")
    print("I can"t wait to see your next trick, " + magician.title() + ".
")

print("Thank you, everyone. That was a great magic show!")

# 输出:
Alice, that was a great trick!
I can"t wait to see your next trick, Alice.

David, that was a great trick!
I can"t wait to see your next trick, David.

Carolina, that was a great trick!
I can"t wait to see your next trick, Carolina.

Thank you, everyone. That was a great magic show!

这里有两个值得注意的地方,一个是“冒号”:for关键字所在的行最后有一个冒号;一个是缩进问题,Python中的代码块都是以缩进为标准,不像C/C++,Java这样的语言以花括号表示代码块。IndentationError指缩进错误。

2. 创建数值列表

这有使用一个重要的生成数列的函数 range() ,以及将数据转换成列表的 list() 函数

# 代码:
print(list(range(6)))         # 结束值(不包含结束值)
print(list(range(1, 6)))      # 起始值(包含),结束值(不含)
print(list(range(1, 6, 2)))   # 起始值,结束值,步长;最后一个数小于结束值
print(list(range(6, 1, -1)))  # 负数步长,此时起始值要大于结束值
print(list(range(1, 6, -1)))  # 负数步长,若起始值小于结束值,则输出空列表

# 结果:
[0, 1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]
[1, 3, 5]
[6, 5, 4, 3, 2]
[]

range()函数也常用语for循环,用于标识循环次数,或者用于生成更复杂的列表:

# 代码:
squares = []
for value in range(1, 11):
    squares.append(value ** 2 + 1)
print(squares)

# 结果:
[2, 5, 10, 17, 26, 37, 50, 65, 82, 101]

对于生成列表,还有一种更简洁的写法,即列表解析式,如上述生成列表的代码可以缩短为一行:

# 代码:
squares = [value ** 2 for value in range(1, 11)]
print(squares)

squares_2 = [value ** 2 for value in range(1, 11) if value % 2 == 0]
print(squares_2)
# 结果:
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
[4, 16, 36, 64, 100]

列表解析式还可以更复杂,这里就不再赘述了。

对数字列表执行简单的统计计算
求一个数字列表的最大、最小值以及所有元素之和:

# 代码:
digits = list(range(10))
print(min(digits), max(digits), sum(digits))

# 结果:
0 9 45
3. 使用列表的一部分 3.1 切片

切片操作用于取原始列表的一部分:

# 代码:
players = ["charles", "martina", "michael", "florence", "eli"]
# [起始:结束:步长], 其中,结果列表包含起始索引,但不包含结束索引
print(players[0:3])
print(players[:3])   # 如果从0开始切片,0可以省略
print(players[1:3])
print(players[2:])   # 如果要便利到最后一个元素,结束索引可以省略,此时最后一个元素会被包含
print(players[-3:])  
print(players[::2])  # 设置了步长,但省略了结束索引,列表最后一个元素如果被遍历到,则会被包含
print(players[:4:2]) # 设置了步长和结束索引,索引4的元素也被遍历到了,但不会被包含在结果中

# 结果:
["charles", "martina", "michael"]
["charles", "martina", "michael"]
["martina", "michael"]
["michael", "florence", "eli"]
["michael", "florence", "eli"]
["charles", "michael", "eli"]
["charles", "michael"]

切片操作的参数设置和range()函数的参数设置十分相似,起始,结束,步长都可以为负值,这里先总结一条规律:如果步长为正数,则起始位置要在结束位置的左边;若步长为负数,则起始位置要在结束位置的右边。

3.2 复制列表

这里有深浅复制的问题。如果直接将一个变量赋值到另一个变量,那么内存中的数据依然只有一份,而不是两份,这两个变量都指向内存中同一个存放数据的内存区域,如果用C/C++的语言来描述,Python中的变量都相当于指针,这两个变量(指针)指向的是同一片内存,对这两个变量(指针)的操作会相互影响,因为都作用于同一内存块,如下:

# 代码:
# 浅复制
players = ["charles", "martina", "michael", "florence", "eli"]
print(players)

names = players
names.append("test")
print(players)

# 结果:
["charles", "martina", "michael", "florence", "eli"]
["charles", "martina", "michael", "florence", "eli", "test"]

如果想在内存中将原来的数据复制出一份新的,则需要深复制,切片操作则是实现深复制的一种方法:

# 代码:
# 深复制
players = ["charles", "martina", "michael", "florence", "eli"]
print(players)

names = players[:]
names.append("test")
print(names)
print(players)

# 结果:
["charles", "martina", "michael", "florence", "eli"]
["charles", "martina", "michael", "florence", "eli", "test"]
["charles", "martina", "michael", "florence", "eli"]
4. 元组(tuple)

和列表紧密联系的一个数据结构则是元组。列表非常适合用于存储在程序运行期间可能变化的数据集,列表可以被修改。然而有时你需要创建一系列不可修改的元素,这个时候则需要用到元组。
元组用圆括号来标识,以下是声明一个元组:

# 代码:
my_tuple = ()    # 空元组
one_tuple = (1,) # 声明含有一个元素的元组。不是one_tuple = (1)

对元组中元素的访问以及对元组的遍历都和对列表的操作一样;不同的是,元组中的元素不能被改变。
虽然元组中的元素不能改变,但是元组变量的值可以改变。从C/C++的角度来看,元组变量是个指针,元组相当于一个const数组,数组虽然不能被改变,但指针可以指向别处。

# 代码:
test_tuple = (1, 2, 3, 4, 5)
print(test_tuple)
test_tuple = (2, 3, 4, 5, 6)
print(test_tuple)

# 结果:
(1, 2, 3, 4, 5)
(2, 3, 4, 5, 6)

相比于列表,元组是更简单的数据结构。如果需要存储的一组值在程序的整个生命周期内都不变,则可使用元组。

迎大家关注我的微信公众号"代码港" & 个人网站 www.vpointer.net ~

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/41799.html

相关文章

  • Python学习之路2-列表介绍

    摘要:本章主要介绍列表的基础与简单操作。列表是什么列表由一系列按特定顺序排列的元素组成。中用中括号来表示列表,并用逗号分隔其中的元素。代码结果打印了该列表的内部表示访问与使用列表中的元素大多数编程语言中,索引都是从开始的,而不是从开始的。 《Python编程:从入门到实践》笔记。本章主要介绍列表的基础与简单操作。 1. 列表(List)是什么 列表由一系列按特定顺序排列的元素组成。类似于C/...

    赵连江 评论0 收藏0
  • Python学习之路5-字典

    摘要:本章主要介绍字典的概念,基本操作以及一些进阶操作。使用字典在中,字典是一系列键值对。中用花括号来表示字典。代码定义空字典的语法结果如果要修改字典中的值,只需通过键名访问就行。 《Python编程:从入门到实践》笔记。本章主要介绍字典的概念,基本操作以及一些进阶操作。 1. 使用字典(Dict) 在Python中,字典是一系列键值对。每个键都与一个值相关联,用键来访问值。Python中用...

    NicolasHe 评论0 收藏0
  • Python学习之路15-下载数据

    摘要:本节中将绘制幅图像收盘折线图,收盘价对数变换,收盘价月日均值,收盘价周日均值,收盘价星期均值。对数变换是常用的处理方法之一。 《Python编程:从入门到实践》笔记。本篇是Python数据处理的第二篇,本篇将使用网上下载的数据,对这些数据进行可视化。 1. 前言 本篇将访问并可视化以两种常见格式存储的数据:CSV和JSON: 使用Python的csv模块来处理以CSV(逗号分隔的值)...

    张春雷 评论0 收藏0
  • Python学习之路14-生成数据

    摘要:小结本篇主要讲述了如何生成数据集以及如何对其进行可视化如何使用创建简单的图表如果使用散点图来探索随机漫步过程如何使用创建直方图,以及如何使用直方图来探索同时掷两个面数不同的骰子的结果。 《Python编程:从入门到实践》笔记。从本篇起将用三篇的篇幅介绍如何用Python进行数据可视化。 1. 前言 从本篇开始,我们将用三篇的篇幅来初步介绍如何使用Python来进行数据可视化操作。本篇的...

    wanglu1209 评论0 收藏0
  • Python学习之路4-if语句

    摘要:本章主要讲述条件语句等结构。是一条包罗万象的语句,只要不满足前面的条件,其中的代码就会执行,这可能会引入无效甚至恶意的数据。使用语句处理列表语句常和循环结构配合使用。 《Python编程:从入门到实践》笔记。本章主要讲述条件语句if, if-else, if-elif, if-elif-else等结构。 1. 条件测试 包括了相等,不等,大于,小于,大于等于,小于等于,存在于,与或非等...

    JouyPub 评论0 收藏0

发表评论

0条评论

makeFoxPlay

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<