我!终于!来!更新了!!!这几天一直跟朋友琢磨稿子,导致推迟了几天,再不更新拖延症要犯了hhh!
之前4.1和4.2有讲过列表,使用while循环,for循环,range范围等,这篇会更加仔细得再进行延伸,所以对列表不熟悉的可以先去看第四章哈
1·len函数
使用len()遍历列表
我们可以使用len()函数遍历整个列表,将len的结果提供给range函数
例:
colours=['White', 'Red', 'Blue']
for i in range(len(colours)):
print(colours[i])
range(len(colours))=range(3),range(3)的范围是0-2,然后最后一句的打印不是一次性的print,在每次i变化的时候,它都会进行print,所以会导致换行的结果。
2·extend方法
extend将列表作为参数并附加所有元素
(列表合并列表)
错误示例1:
t1 = ['a', 'b', 'c']
t2 = ['d', 'e']
print(t1.extend(t2))
错误示例2:
t1 = ['a', 'b', 'c']
t1 = t1.sort()
print(t1)
“.”指调用一个方法
大家可能都会觉得这两个print都会返回[‘a’, ‘b’, ‘c’, ‘d’, ‘e’],
事实上并不是这样:
我们可能会疑惑使用extend不是会得到合并两个列表元素的列表嘛?这是因为:
大多数列表方法都是无效的!它们修改列表并返回None(什么也不返回)
示例1中,extend修改t1,但什么也不返回。sort也是如此。
示例2中,用sort方法去给t1的元素排序,并在t1存储调序结果。因为我们把None存储进t1,如果我们要整理t1的元素,直接调用sort方法,函数t1.sort,不用把它存储在变量里,代码中sort已经调整了t1,根据函数功能已经修改了t1,所以t1 = t1.sort()要改成t1.sort
所以经过修改,代码应该改成这样,方法才会发挥作用:
示例1
t1 = ['a', 'b', 'c']
t2 = ['d', 'e']
t1.extend(t2)
print(t1)
示例2
t1 = ['c', 'b', 'a']
t1.sort()
print(t1)
打印结果:
['a', 'b', 'c', 'd', 'e']
['a', 'b', 'c']
3·减少Reduce,映射Map,过滤Filter
reduce,map,filter是在讨论列表时的通用概念
,它们不是指特定的功能和方法,而是指可以对列表执行的可能事情的通用概念
Reduce
当我们将一系列元素组合成单个值时,可以想到这个概念。
myFullList = [1, 2, 3]
reducedList = sum(myFullList)
print(reducedList)
打印结果:
6
取用列表,通过函数功能,让它减少成为一个值,将许多维度变成一个,称为减少reduce
Map
当我们将函数"映射mapping"到序列的所有元素时,我们可以用"map"定义
"""
def capitalise_all_letters(mySequence):
newSequence = []
for s in mySequence:
newSequence.append(s.capitalize())
return newSequence
lowCaps = ['h', 'e', 'l', 'l', 'o']
print(capitalise_all_letters(lowCaps))
打印结果:
['H', 'E', 'L', 'L', 'O']
capitalize表示使用大写的方法
把旧的序列中元素变成大写并返回到新的列表中
代码所示例的方法就是mapping,采用大写的方法,把它应用在列表的每个元素上。列表的每个元素被函数修改和存储到另一个地方,所以map就是将新函数映射到序列的每个元素。
Filter过滤
filter可以看作我们只选用一些元素,筛选其它的元素
在这个例子中,只取大写字母
def only_upper(mySequence):
newSequence = []
for s in mySequence:
if s.isupper():
newSequence.append(s)
return newSequence
mySentence = 'This is a string, but also a sequence!'
print(only_upper(mySentence))
打印结果:
['T']
isupper是检查大小写的函数
因为里面唯一的大写字母是T,所以在only_upper函数中的运算结果,返回的新列表中只有大写T。我们把类似于这样的操作称之为过滤。只筛选出大写字母,过滤掉不是大写字母的其它元素。
4·嵌套列表
当我们在另一个列表中有一个列表时,就会产生嵌套列表
例:
嵌套列表中,列表可以包含其他列表作为其中的元素
5·多维列表
一维列表
二维列表的概念可视化
有横向和纵向
看一下对比,多维列表就是列表不是只走一个方向,可能有第二个方向
Python没有任何默认的数据结构来存储多维序列,但是可以通过列表内部的list来实现。
Python对于多维列表没有特殊的名称,比如元组,列表这些命名所以我们要用嵌入列表(把列表放进另一个列表)来表现多维列表,创造某种网格
list_2d = [[5,2,3], [8,7,1], [4,6,9]]
print(list_2d)
打印结果:
[[5, 2, 3], [8, 7, 1], [4, 6, 9]]
如果我想要大列表的第3个列表的第2个数字6(在嵌入列表中索引号为1)
print(list_2d[2])
打印结果:
[4, 6, 9]
print(list_2d[2][1])
打印结果:
6
可以先用list_2d[2]来选出第三个列表,再用list_2d[2][1]选择第三个列表中的第二个数字6
举一反三:
print(list_2d[0][2])
打印结果:
3
print(list_2d[1][0])
打印结果:
8
再看一个多维列表示例:
def list_2d():
list2d = []
#给空列表增加三个空列表:
list2d.append([])
list2d.append([])
list2d.append([])
#我们已经准备好可以包含三个列表的三个插槽,再建立一个二维网格:
#初始化2d表格,通过for循环来初始化列表
for row in range(3):
for col in range(3):
list2d[row].append(row + col)
#设定了row的范围,list2d[row]中包含0,1,2,接着横向加上col的列表元素0,1,2
for row in range(3):
print(list2d[row])
#函数里定义的数不能在函数外使用,所以要定义row
list_2d()
[0+0 , 0+1 , 0+2]得出第一个列表[0 , 1 , 2]
再到[1+0 , 1+1 , 1+2]得出列表[1,2,3]
然后再重复,得出列表[2,3,4]
每个单个的row运行一次col,最后打印row的每个元素。因为它是一个二维列表,row的每个元素本身就是一个列表,因此,会打印三个单独的列表。
多维列表会有一点点复杂的感觉,所以大家一定要耐心!