python的列表我觉得是真的六,为什么呢?你说它是C的数组吧,但是比C的数组可是真的灵活多了,因为列表可以包含不同的元素组成一个列表;
一、列表的创建:
列表的创建有两种方法:
1、直接创建用[]:
num=[1,2,3,4,5,6,7]
name=[1,"2",3.0]#可以看出列表的内容完全可以不同的
2、使用list函数创建:
说实话list函数你可以把它看做是一种创建,也可以把它看成是一种类型转换,也就是说,什么都可以转换成为列表,如下:
#将字符串转换成列表
list1 = list("hello")
print(list1)
#将元组转换成列表
tuple1 = ('Python', 'Java', 'C++', 'JavaScript')
list2 = list(tuple1)
print(list2)
#将字典转换成列表
dict1 = {'a':100, 'b':42, 'c':9}
list3 = list(dict1)print(list3)
#将区间转换成列表
range1 = range(1, 6)
list4 = list(range1)print(list4)
运行结果:
['h', 'e', 'l', 'l', 'o']
['Python', 'Java', 'C++', 'JavaScript']
['a', 'b', 'c']#字典转化成列表则是将索引变成了列表
[1, 2, 3, 4, 5] #range是左闭右开
二、删除一个列表
intlist=[1,45,8,34]
del intlist
所以说删除一个列表很简单,就是直接删除它就可以了
三、列表增加一个元素
三种方法,一一列举太麻烦,所以我直接上代码的比较简单:
tmp1 = {'a':2,'b':3}
list_tmp = [5,6,7]
#第一种方法,调用append会把tmp1作为整个字典元素插入到list_tmp的最后面
list_tmp.append(tmp1)
print(list_tmp)
#第二种方法,调用extend会把tmp1的元素拆分成元素插入到list_tmp的最后面,按照上述所说,插入的是“a”,"b";
list_tmp.extend(tmp1)
print(list_tmp)
#第三种方法,调用insert会把tmp1作为整个字典元素插入到list_tmp的最后面
list_tmp.insert(6,tmp1)
print(list_tmp)
运行结果:
[5, 6, 7, {'a': 2, 'b': 3}]
[5, 6, 7, {'a': 2, 'b': 3}, 'a', 'b']
[5, 6, 7, {'a': 2, 'b': 3}, 'a', 'b', {'a': 2, 'b': 3}]
这里面有个坑,就是你不能用insert(-1,xxx)来代表你要插入到最尾,虽然list_tmp[-1]代表的是最后一个列表的元素;如果insert是-1的话,那么插入的是倒数第二个字段;
四、列表删除一个元素
列表删除一个元素有三种方法,也可以理解为3+1,那个1是clear,调用clear会把列表中所有的元素都清除,不过讲到这里,我要说一句很关键的总结性的话,那就是无论是什么样的增删改查,凡是调用的内置函数,比如说,sorted,reversed,或是什么,都是临时的;但是如果是list.式的调用,那可是永久的;后面会讲到;
1、del list[2]#删除第三个元素
2、list.pop(2)#函数删除第三个元素,类似于弹栈的方式
3、list.remove('b')#remove就是可以根据列表的内容进行删除
3、list.clear()#把所有的东西都删除了,变成了一个空的列表
五、列表修改一个元素
修改就更简单了;list[2] = 10;即可;当然也可以用分片的方式:list[2:4:2] = [7,8],具体什么含义你懂得,就是从第三个元素到第5个元素,每隔一个进行一次修改,那么第三个变成了7,第5个变成了8,就是这样的
六、查找列表一个元素
查找一个元素有两种方法,一个是查找位置,一个是查找个数:
1、查找位置
index函数
nums=[40,36,89,2,36,100,7,-20.5,-999]
nums.index (100,4,7)#查找的是100这个元素,从第5个位置,然后查到第8个位置
nums.index(4,7)#查找的是4这个元素,从第8个位置往后
nums.index(100)#查找的是100这个元素,查找的是整个列表
count函数
num.count(100)#查找100出现的次数
七、列表进行排序
那么由上面所述,排序的话,有两种方式:
1、永久排序
list.sort()
2、非永久排序
sorted(list)
八、列表的倒序
那么由上面所述,倒序的话,有两种方式:
1、永久倒序
list.reverse()
2、非永久倒序
reversed(list)
九、列表的循环访问
1、for tmp in list
2、for i in range(1,len(list))
第一种方法,tmp是list的元素,我们遍历的话就会是tmp去当做list中的每一个的元素;第二种方法,得到list的长度,那么i的话,就会是在这个长度里,也就是说,i就是代表的是索引,用i作为角标的话,可以得到list中的元素----->list[i]
十、列表的复制
只要提到复制,那就要讲一讲就是什么是深拷贝,什么是浅拷贝
先说浅拷贝,浅拷贝就是个软连接,就好像是你给它又起了个名字,或者说是个小名;你让这个小名的变量去做一件事,就意味着你让这个大名的变量去做同样的一件事,没有毛病;
那么深拷贝就不一样了;深拷贝就是好比你克隆了一个人,那么就是两个人了;你让真人去打球,那么克隆人完全可以去游泳
所以,有了以下的分类:
1、深拷贝
1)list2 = list1[:]
2)list2 = copy.deepcopy(list1)
这种是深拷贝,深拷贝的话,就是你可以遍历了整个list,或者比如说哈,list2 = list1[2:4],这种分片肯定是深拷贝把,所以list1[:]也是一样的
2、浅拷贝
1)list2 = list1
2)list2 = copy.copy(list1)
这就是浅拷贝了,list2只是list1的小名,你让list2去做什么,list1就做什么,反之也是一样的;这就解释了为什么说,对于python来说,一个变量初始化,未必就给它开辟了真正得到内存;比如说list2,当然名字的保存是肯定开辟内存的,我们说的是列表的内存;
十一、元组
元组其实你可以看做是不能更改的列表,即a = (1,2,3);在创建的时候,就已经注定了a作为元组,里面的元素是无法进行更改的;所以,没有改和删和增等一系列的操作;但是元组有以下的创建方法(除了直接赋值括号这种)
list1 = [1,2,3,4,5,6,7,8,9,0]
tmp3 = tuple(list1)
list1.append(11)
print(list1)
print (tmp3)
这种就是把列表改为了一个元组,我之所以还加了一句list1.append,事项告诉的是,list1在被tuple函数修饰了以后,改变的不是list1,而是tmp3,list1还是可以继续添加元素的;就是这样简单;
至于元组的循环访问,和列表是一样的,这里没有必要再重复一遍;
然后对于元组的删除,可以用del tmp1即可;