昨天简单认识了列表,今天继续看看更多列表的内容。
遍历列表
所谓遍历列表就是访问一下每一个元素,并且对这个元素做点什么,比如我们想把列表中的每一个元素都打印出来:
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——
领取专属 10元无门槛券
私享最新 技术干货