操作列表—Python 基础

昨天简单认识了列表,今天继续看看更多列表的内容。

遍历列表

所谓遍历列表就是访问一下每一个元素,并且对这个元素做点什么,比如我们想把列表中的每一个元素都打印出来:

for 循环

如果列表中有一千个元素呢,这么干的你是不是就哭了,所以我们可以用循环来做,比如 for 循环:

for 循环的格式是:

for 循环是这样工作的:Python 从列表 animals 中取出第一个元素,然后把它赋值给变量 animal,(animal 只是个变量名,你起什么名字都可以)然后执行 print(animal) 就打印出来了第一个元素。以此类推就打印出来所有元素。

当然,除了简单的打印元素本身,你还可以更复杂的操作,比如:

使用 range() 函数

假如你需要打印10以内的所有偶数,该怎么做呢?可以用 for 循环配合 range 函数

range 可以方便的生成一系列数字:

上例通过 range(2,5) 可以拿到2、3、4这三个数,包含开头,不包含结尾。

range(start, stop, step) 接收3个参数,最后一个是间隔,如果不填,默认就是间隔1。

那么10以内所有偶数就是:

range 与 list有很多相似的地方,但其实不一样。

以上两个 for 循环结果是一样的,但是在 Python3中 range 函数返回的值并不是list:

我 google 了一通,range 返回的值是“an immutable sequence object of integers depending upon the definitions used”,我的翻译是:根据我们的指令生成的不可修改的整数序列对象。

这个对象像list一样拥有长度、可以用 index 取其中的值,能 slice 等等等,但它就不是list。它的大小是永远一样的,不管你是 range(0,1) 还是 range(0,99),因为它在根据你的要求计算之前,是不会在内存中写一个实际的list的。比如你执行了上例第三行代码a[1],这个时候 a 才计算一下index 为1的那项是什么,然后返回给你,你不提要求,就什么都没有,这样设计的初衷是节省内存。

以上是我查资料后的理解,可能有误。而且鉴于这就是小白的基础入门课呢,我就不深究了,我手上的书上都没讲这么深(⊙﹏⊙)b

但是 range 是可以转化为list的,使用 list() 函数:

列表解析

列表解析是什么,我们先看一个例子,如果要新建一个装1,2,3三个数的list,很简单,直接写:

如果要装1到100之间,每一个数的2次方呢?直接写肯定不行,可以用循环:

列表解析是一种更简洁的生成复杂列表的方式,比如依然是解决上述问题,可以这样:

这一行代码,就实现了和上面循环一样的效果。num**2 是一个表达式,它就是会填到这个list中的值,而后面的 for 循环就是定义这个值到底是什么的。

用 index 拿列表中的一部分

跟字符串类似

如果省略开始索引,那就从头拿;省略结束索引,那就一直拿到最后一个元素:

负数索引代表从后往前数:

如果前后索引都省略呢? 那就是从第一个拿到最后一个,全拿,就相当于完整复制一份:

什么时候需要复制?

看个案例,假如 a 喜欢 cat 和 dog,b 也喜欢 cat 和 dog,所以直接等于 a,后来 b 又喜欢了 pig 所以加上 pig,但问题来了,a 也被加上 pig 了,因为 a 和 b 指向的是同一个 list:

使用复制就不会有这个问题:

元组(tuple)

tuple 是什么东西?

先看一个简单的 tuple:

元组和列表非常像,元组使用括号,而列表使用方括号。当然,最重要的区别是:列表中的元素可以改变,而元组中的元素一旦确定了,就不能改变了。以下是行不通的:

元组的好处是什么?

1、有些数据注定是不该被改变的,比如你的生日,把不该变的数据放在元组中更安全。

2、元组应该放那些客观该被改变的东西,用这些东西来表示数据结构,而列表则是表示顺序的。比如你站在街上,想把你的位置坐标存起来,就用一个元组:

如果你想把你走路经过的所有点都存起来,应该用 list:

3、因为元组不可修改,所以可以作为字典的 key,而列表则不行(如果不懂的话,等后面学字典是什么东西就知道了)

创建元组

注意,元组并不是由括号定义的,而是逗号,除了空元组,其他情况都必须加逗号,哪怕元组中只有一个元素。我们可以用函数 type 来验证,函数 type 能返回对象的类型:

为什么上例中的 b 不是元组,因为括号被当做了算数表达式的运算符来处理。

用 index 拿元组中的一部分

改变元组

虽然说了不能改元组内的元素,但如果该元素是 mutable 的,则可以改这个元素内部的元素,比如 list:

这是因为你保存到元组中的是一个列表的引用 , 相当于一个指针,它指向存放这个列表的实际位置。所以当你修改列表内部元素的时候,修改的是那个实际的列表,而这个“指针”不变,所以元组认为它的这个元素也没变。

还可以用加号把两个元组相加,生成一个新元组:

用乘号重复元组:

你也可以通过重新赋值的方法,改变整个元组:

删掉元组

虽然不能删掉元组中的元素,但我们可以删掉整个元组:

顺便说一下del,以下这段如果你是纯小白可能不懂,没关系: del 后面没跟(), 显然不是函数,我查了文档,del 是语句(statement)类似 break、return,但百度出来的好多国内资料都说“del函数”真是坑爹。

遍历元组

依然可以用 for 循环遍历元组:

其他元组相关方法和函数

count 方法,查某元素在元组或者列表中出现的次数:

index 方法,查某元素在元组或者列表中,第一次出现的index:

tuple 函数,把列表、字符串等转换成元组:

max 函数,返回最大元素

还可以指定 key,比如找出长度最长的字符串:

sorted 函数,返回一个排序后列表:

sum 函数,返回元组或列表中元素的和:

all 函数,看元组或者列表中元素是否全部为 True

any 函数,看元组或者列表中元素是否至少有一个为 True

最后,留个小作业,如果你在跟我一起学,就试着做做,把答案回复到公众号后台哈,明天集中回复。

完成以下任务:

——over——

初学笔记难免有谬误,欢迎您指出,感谢。

——doyoudo is the best——

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180302G0PDFG00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券