上次讲了Python数据处理中元组的一些使用方法
这次就讲讲列表和 列表 的使用:
目录
二、列表
Q1:上次留了一个问题,那就是元组中的数据是不可变的,那么列表中的元素可以改变吗?
Q2:那么我们改如何通过列表来更改数据呢?
Q3: 我们发现这样改变列表中的数值对列表中的实际数据没有任何关系,这里的x是一个独立变量,每次循环都会取一个新值,但是我们如何才可以改变实际数据中的值呢 ?
Q4:enumerate 的魔力能改变列表中数据的值,但是有的时候我们遇到一串比较杂乱无序的数据,我们有什么比较快速的方法可以改变数据中的顺序,也就是给一串杂乱的数据进行排序呢?
Q5:既然Python能给我们把数字排好序,那么字符也能不能像数字那样排好序呢?
Q5.1 但是有时我们只要临时修改以下排列的顺序,要该怎么做呢?
Q5.2 反向打印
Q6 :讲了这么多,我们没还没讨论增加,删除元素嘞!
Q7:但是前面两种插入的方法还是有局限性,当我们需要随意插入元素的时候,又该怎么办呢?
Q8: 有了添加也有删除
关于列表的小总结
Q1:上次留了一个问题,那就是元组中的数据是不可变的,那么列表中的元素可以改变吗?
我们先看看列表的样子
list = [1,'2','a',3,'哈喽']
print(list)
它的定义和元组 一样,只不过它用的是方括号,打印出来的也是整个列表,列表也可以理解为数组
列表里面很多功能和元组 相似,我就不一一列举了,列表和元组的不同点是,列表可以更改 数据,这样我们 就可以结局Q1中的问题,我们就可以解决了。
#这里我列举了部分示例代码,有兴趣的读者可以自己复制下来试试
list = [11,22,33,44,55,66,77,88,99]
print('打印第一个元素')
print(list[0])
for x in list:
print(x)
print('打印后三个元素')
for x in list[-3:]:
print(x)
其实列表还有个功能,我们可以 在一个列表里面再嵌套一个列表,当然元组也是支持这么操作的。
mylist = [[1,2,33],['大大',1,'da']]
print(mylist[0][2])#仔细观察的人能发现,这个式子打印的是第一个小列表中的第三个元素,也就是33
print(mylist[1][0])#打印大大
print(mylist[0][1])#打印 2
Q2:那么我们改如何通过列表来更改数据呢?
我最先想到的是,先定义一个列表,然后for 循环遍历里面的每一个元素,最后再输出的时候,把列表里的值改一下,我们看看这段代码。为了检验列表最终是否改变了,我再整体打印一遍列表中的值
list = [1,2,3,4,5]
for x in list:
x = x*2
print(x)
print(list)
程序的结果却是,它“改变”是“ 改变”了,也只是在循环里面,把列表里的每个值乘了2,实际上list 中的值并没有改变
程序运行结果
Q3: 我们发现这样改变列表中的数值对列表中的实际数据没有任何关系,这里的x是一个独立变量,每次循环都会取一个新值,但是我们如何才可以改变实际数据中的值呢 ?
Python 中提供 enumerate 函数正好适用这样的情况
接下来就看看这个程序
list = [1,2,3,4,5]
for counter, x in enumerate(list):#counter 是我们定义循环中的另一个变量,用来跟踪我们在列表中的位置
print("counter is",counter)
print("x is",x)
list[counter]= x*2#这一行实现了加倍魔法,并将结果返回到了list里
print(list)
这样程序就如我们预期的那样运行
Q4:enumerate 的魔力能改变列表中数据的值,但是有的时候我们遇到一串比较杂乱无序的数据,我们有什么比较快速的方法可以改变数据中的顺序,也就是给一串杂乱的数据进行排序呢?
我们先看一个乱序的列表数据
list = [1,22,3,6,333,2]
这一串数据虽然看起来比较少,我能一眼看出来,但是以后有数以千计甚至上万级别的数据量给我们排序,我们就束手无策了。其实Python中排序用到 .sort(),看下面的代码
print(list)
list.sort()
for x in list:
print(x)
程序的运行结果如下
这样Python就给我们排好序了
Q5:既然Python能给我们把数字排好序,那么字符也能不能像数字那样排好序呢?
我们先定义一个字符列表,并将它们进行排序,并看看程序的运行结果是什么样的
mylist = ['my','name','is','Gorit']
print(mylist)
mylist.sort()
for x in mylist:
print
程序的 第一行是我们想要的结果,然而后面打印的结果却和我们想象的截然相反,经过多次尝试,我们可以发现,大写字母的 优先级总是高于小写字母,但是我们可以在.sort()代码中增加参数 key = str.lower,如下代码
mylist.sort(key = str.lower)#我们增加的这样的参数,是为了进行大小写不敏感的排序
sort 能够永久性的更改列表中的元素位置,但是如果我们想要与字母顺序相反的顺序进行排列元素,因此我们可以这么做,给sort 传递以下参数
mylist.sort(reverse = True)
这个时候我们可以用 sorted()函数对列表进行临时排序,看下面这个程序
mylist = ['coco','ada','pdick','doof']
print(sorted(mylist))#临时排序
print(mylist)
同理,如果你要反顺序打印,也可以用上面的方法
mylist = ['coco','ada','pdick','doof']
mylist.reverse()
print(mylist)
Q6 :讲了这么多,我们没还没讨论增加,删除元素嘞!
其实Python中增添用.append(参数) 函数就可以了
下面看看这段代码
list = [1,2,3,4,5,6]
list.append(7)#将7添加到;列表末尾
list.append([21,3,2])#也可以加入子列表
第三个代码加入的是子代码,但是添加的确是子列表, 而且append使用也有限制,一次只能增加一个数据。
于是就有了.extend()函数,它是让你先定义一个列表,然后再用 extend函数 调用我们定义的列表,然后将其加到我们想要加到的列表里,下面这段代码告诉了我们这个函数的用法
list = [1,2,3,4,5,6]
list1 = [11,22,33,44,'啊']
list.extend(list1)
print(list)
这样程序就能如我们的预期那样,把两个列表合并了
Q7:但是前面两种插入的方法还是有局限性,当我们需要随意插入元素的时候,又该怎么办呢?
Python中提供了 insert 函数 供我们在任意位置插入一个元素,它的用法如下
list = [1,2,3,4,5,6]
print(list)
list.insert(0,'ada')#前者代表表中的位置,也就是要插入元素的下标,后者代表要插入的元素
print(list)
运行结果
Q8: 有了添加也有删除
删除操作用.remove()
list = [1,2,3,4,5,6]
list.remove(4)#遍历列表中的所有值,删除第一个出现的元素
删除列表中的多次出现的元素,只能用循环了
#删除多次重复的数据
mylist = [500,12,2,3,500,500,6,54,500]
for x in range(0,mylist.count(500)):#count是得到多少个出现的count的值,然后根据循环进行删除
mylist.remove(500)#删除包含500 的元素
print(mylist)
关于列表的小总结
//创建列表
>>> cast=["class","palin","jones","idle"]
>>> print(cast)
['class', 'palin', 'jones', 'idle']
>>> print(cast[1])
palin
//append可以在末尾增加一个数据项
>>> cast.append("Gillam")
>>> print(cast)
['class', 'palin', 'jones', 'idle', 'Gillam']
//pop()删除末尾的一个数据项
>>> cast.pop()
'Gillam'
>>> print(cast)
['class', 'palin', 'jones', 'idle']
//extend可以之末尾增加一个数据项集合
>>> cast.extend(["Gillam","chamion"])
>>> print(cast)
['class', 'palin', 'jones', 'idle', 'Gillam', 'chamion']
//remove 可以删除一个指定项
>>> cast.remove("chamion")
>>> print(cast)
['class', 'palin', 'jones', 'idle', 'Gillam']
//使用insert可以在特定的位置插入一个制定项
>>> cast.insert(2,"chamion")
>>> print(cast)
['class', 'palin', 'chamion', 'jones', 'idle', 'Gillam']