Python中的数据处理(列表)——(二)

上次讲了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)

 

Q5.1 但是有时我们只要临时修改以下排列的顺序,要该怎么做呢?

  这个时候我们可以用 sorted()函数对列表进行临时排序,看下面这个程序

mylist = ['coco','ada','pdick','doof']
print(sorted(mylist))#临时排序

print(mylist)

 

同理,如果你要反顺序打印,也可以用上面的方法

 

Q5.2 反向打印

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']

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值