感觉python中的list列表就是动态数组,直接拿来当数组用。
[数据1, 数据2, 数据3, 数据4…]
list=["Tom", "Jack", "Bob"]
index():返回指定数据所在位置的下标 。
列表序列.index(数据, 开始位置下标, 结束位置下标)
不写下标默认全部
list=["Tom", "Jack", "Bob"]
# 1获取元素索引
print("Bob index:"+list.index("Bob").__str__())
Bob index:2
count():统计指定数据在当前列表中出现的次数。
list=["Tom", "Jack", "Bob"]
print("Number of occurrences:"+list.count("Bob").__str__())
Number of occurrences:1
len():访问列表⻓度,即列表中数据的个数。
list=["Tom", "Jack", "Bob"]
print("size:"+len(list).__str__())
size:3
in:判断指定数据在某个列表序列,如果在返回True,否则返回False。in,not in是序列公共的方法,字符串、元组、列表、集合、字典都可以用。
print("Jack" in list)
print("jack" not in list)
True
True
append():列表结尾追加数据。如果append()追加的数据是⼀个序列,则追加整个序列到列表。
list = ["Bob", "Jack", "Tony"]
# append方法,添加元素到列表尾,如果添加的是列表,则将列表整体作为一项添加
list.append("Susan")
print(list)
list.append(["Maria","John"])
print(list)
['Bob', 'Jack', 'Tony', 'Susan']
['Bob', 'Jack', 'Tony', 'Susan', ['Maria', 'John']]
extend():列表结尾追加数据,如果数据是⼀个序列,则将这个序列的数据逐⼀添加到列表。
list = ["Bob", "Jack", "Tony"]
str="Sos"
list.extend(str)
print(list)
list.extend(["23","dfd","Jadorn"])
print(list)
['Bob', 'Jack', 'Tony', 'S', 'o', 's']
['Bob', 'Jack', 'Tony', 'S', 'o', 's', '23', 'dfd', 'Jadorn']
insert():指定位置新增数据。
列表序列.insert(位置下标, 数据)
# insert方法,插入元素
list = ["Bob", "Jack", "Tony"]
list.insert(1,"Neighbor")
print(list)
['Bob', 'Neighbor', 'Jack', 'Tony']
该方法可以删除整个列表,或者删除列表中的某个元素。
del 列表名 或 del(列表名)
list = ["Bob", "Jack", "Tony"]
# del方法,删除列表或指定下标的数据 del方法
del(list[1])
print(list)
del(list)
print(list)
['Bob', 'Tony']
<class 'list'>
名称类似数据结构栈中的出栈,该方法删除指定下标的数据(默认为最后⼀个),并返回该数据。该方法的参数是索引。
列表序列.pop(下标)
# pop方法,删除指定下标元素,无参数默认删除最后一个,且返回值是删除的元素
list = ["Bob", "Jack", "Tony"]
print("删除的元素是:"+list.pop(1))
print(list)
删除的元素是:Jack
['Bob', 'Tony']
remove():移除列表中某个数据的第⼀个匹配项。该方法的参数是元素。
列表序列.remove(数据)
# remove方法,删除指定的元素
list = ["Bob", "Jack", "Tony"]
list.remove("Jack")
print(list)
['Bob', 'Tony']
清空列表,大家都知道。
# clear方法清空数据
list.clear()
print(list)
[]
直接修改。
# 修改单个元素
list=["Bob", "Jack", "Tony"]
list[1]="Machine"
print(list)
['Bob', 'Machine', 'Tony']
反转列表(听名字像反转链表…)。
#反转列表
['Bob', 'Machine', 'Tony']
list.reverse()
print(list)
['Tony', 'Machine', 'Bob']
内置的排序方法。
列表序列.sort( key=None, reverse=False)
注意:reverse表示排序规则,reverse = True 降序, reverse = False 升序(默认),key是排序使用的的比较对象
['Bob', 'Machine', 'Tony']
list.sort()
print(list)
list.sort(reverse=True)
print(list)
['Bob', 'Machine', 'Tony']
['Tony', 'Machine', 'Bob']
在使用copy方法前需要明确浅拷贝与深拷贝的区别。
深拷贝与浅拷贝的区别在于,当从原本的list复制出的list之后,修改其中的任意一个是否会对另一个造成影响,即这两个list在内存中是否储存在同一个区域,这也是区分深拷贝与浅拷贝的重要依据。
浅拷贝:不管多么复杂的数据结构,浅拷贝都只会copy一层。
深拷贝:深拷贝会完全复制原变量相关的所有数据,直到最后一层,在内存中生成一套完全一样的内容,在这个过程中我们对这两个变量中的一个进行任意修改都不会影响其他变量
此处的列表的copy方法是浅拷贝。
list=[1,3]
list1=[44,423,list]
list2=list1.copy()
此处将list1拷贝给了list2,事实上是list2指向了新建的一个列表对象,这一点我们可以通过查看两个对象的地址得到。
print(id(list1))
print(id(list2))
2295728776840
2295728776584
由于列表中的copy是浅拷贝,所以list2只拷贝到了list1的第一层,在这个例子中即list2[2]存储的是list的地址,而不是list指向的对象的值(即更深一层),这一点我们可以通过查看地址得到。
print("list2[2] address:"+id(list2[2]).__str__())
print("list address:"+id(list).__str__())
list2[2] address:2295728776968
list address:2295728776968
由于list2[2]中存储的是地址所以我们对copy对象list1中的第二元素list1[2]或者list作修改,list2也会发生变化。
##修改list值
list[:]=[11,33]
# 浅拷贝,修改其中一个列表会对另一个列表产生影响
print("list1:"+list1.__str__())
print("list2:"+list2.__str__())
list1:[44, 423, [11, 33]]
list2:[44, 423, [11, 33]]
如果要进行深拷贝,则可以使用copy.deepcopy()。
#深拷贝
import copy
list=[1,3]
list1=[44,423,list]
list2=copy.deepcopy(list1)
list[:]=[11,33]
#list2不会改变
print("list1:"+list1.__str__())
print("list2:"+list2.__str__())
list1:[44, 423, [11, 33]]
list2:[44, 423, [1, 3]]
使用for循环或while循环遍历即可。
list=["Bob", "Jovi", "Maria"]
# while循环遍历
i=0
while i < len(list):
print(list[i],end=" ")
i+=1
print()
Bob Jovi Maria
# for循环遍历
for i in range(len(list)):
print(list[i],end=" ")
print()
for item in list:
print(item,end=" ")
Bob Jovi Maria
Bob Jovi Maria