列表作为有序数据类型。大部分操作和字符串类似。别如获取列表的元素;切片操作等。

1:索引(下标)

2:增、删、改、查

3:常用函数

4:列表解析

一:索引: 通字符串一样,从左到右。索引从0开始到len(list)-1结束。

从右到左,-len(list)到-1

a=[1,2,3,4]
print(a[0])
print(a[-1])
1
4

二:1、列表增加一个元素。append()函数默认从最后加。insert(index,object)可以指定位置加入元素。

a=[1,2,3,4]
b=[1,2,3,4]
a.append(5)
print(a)
b.insert(b[0],0)
print(b)
[1, 2, 3, 4, 5]
[1, 0, 2, 3, 4]

2:删除一个元素。用pop(index)默认删除最后一个元素。或者用remov(元素)函数。注意区别。

a=[1,2,3,4]
b=[1,2,3,4]
a.pop(2)
print(a)
b.remove(1)
print(b)
[1, 2, 4]
[2, 3, 4]
###################
a=[1,2,3,4,6,6,7,7,23,23,23,5]#del可以删除任何内存中的数据,变量等。
del a[2:4]
print(a)
[1, 2, 6, 6, 7, 7, 23, 23, 23, 5]

练习:如何删除一个列表中重复的元素?

a=[1,2,3,4,6,6,7,7,23,23,23,5]
Num=a.count(23)
for i in range(Num):
    a.remove(23)
print(a)
[1, 2, 3, 4, 6, 6, 7, 7, 5]

通过count()函数获取23元素出现次数。作为for循环的次数。进而删除重复出现23元素。

三:列表解析:

列表解析:
语法:[expr for iter_var in iterable] 或 [expr for iter_var in iterable if cond_expr]

这个好处是避免写冗长的代码来获取列表。

列表解析是比较早的Python版本里就引进的(好像是2.0版本),而生成器表达式则是在2.4中引入的新内容,它和列表解析的语法很像,但是在大数据量处理时,生成器表达式的优势就体现出来了,因为它的内存使用方式更好,效率更高,它并不创建一个列表,只是返回一个生成器。

1)
list_a=[1,2,3,4,4]
list_b=[3,4]
list_contiain=[i for i in list_a if i in  list_b]
print(list_contiain)

[3, 4, 4]
2)
a=[x for x in range(3)]
print(a)

[0, 1, 2]

四:列表的合并,用函数extend()

a=[x for x in range(3)]
b=[i for i in range(2)]
a.extend(b)
print(a)

[0, 1, 2, 0, 1]

五:列表的深浅拷贝,用函数copy()

a=[1,2,3,4,[1,2]]
b=list(a)
c=a[:]
b[4][0]=55
print(a,b,c)
[1, 2, 3, 4, [55, 2]] [1, 2, 3, 4, [55, 2]] [1, 2, 3, 4, [55, 2]]
###############################
a=[1,2,3,4,[1,2]]
c=a.copy()
c[4][0]='t'
print(a,c)
[1, 2, 3, 4, ['t', 2]] [1, 2, 3, 4, ['t', 2]]
#######################################
import copy
a=[1,2,3,[1,2]]
c=copy.copy(a)
c[3][1]='fuck'
print(a,c)
[1, 2, 3, [1, 'fuck']] [1, 2, 3, [1, 'fuck']]
###########深拷贝######################
import copy
a=[1,2,3,[1,2]]
c=copy.deepcopy(a)
c[3][1]='fuck'
print(a,c)
[1, 2, 3, [1, 2]] [1, 2, 3, [1, 'fuck']]

思路一:利用切片操作和工厂方法list方法拷贝就叫浅拷贝,只是拷贝了最外围的对象本身,内部的元素都只是拷贝了一个引用而已。
思路二:利用copy中的deepcopy方法进行拷贝就叫做深拷贝,外围和内部元素都进行了拷贝对象本身,而不是引用。
但是对于数字,字符串和其他原子类型对象等,没有被拷贝的说法,即便是用深拷贝,查看id的话也是一样的,如果对其重新赋值,也只是新创建一个对象,替换掉旧的而已。