python数据类型之列表
python列表
- 作用:多个装备,多个爱好,多门课程,多个女朋友等
- 定义:[]内可以有多个任意类型的值,逗号分隔
python列表索引及切片
列表是有序的,可通过下标查看列表中的元素
lits1 = [1,2,3,4,5,6,7,8,9]
lis[start,end,step] 遵循左闭右开原则(末端不包含)
start 元素下标起始位置,包含对应元素值,不传默认为首部
end 元素下标结束位置,不包含对应元素值,不传默认为最末端
step 步长,不传默认为1,下标对应往上+1,直到到结束位置
lits1 = [1,2,3,4,5,6,7,8,9]
print(lits1[0])
print(lits1[0:8:2])
print(lits1[1:]) # 起始位置为
print(lits1[::])
print(lits1[:8])
运行结果
列表方法
可通过help()-->list,进行查看列表方法
或通过dir(list)查看列表方法
list()
定义一个列表,可将其他类型转为列表
b =
a = '12345'
print(list(a))
运行结果
append()
append() 方法用于在列表末尾添加新的对象。该方法无返回值,但是会修改原来的列表。
list.append(obj)
- obj -- 添加到列表末尾的对象。
lis1 = ['huawei', 'google']
lis1.append('amz')
print(lis1.append('amz')) # 打印append方法为None
print(lis1) # 添加了几次就在列表中增加几次
运行结果
clear()
clear() 函数用于清空列表,类似于 del a[:],该方法没有返回值。
lis1 = ['加油华为','加油中国']
print(lis1.clear())
print(lis1)
运行结果
copy() & deepcopy()
字典 copy() 函数返回一个字典的浅复制,即浅拷贝,对应的也有deepcopy(),该方法和浅拷贝使用方法相同,均为拷贝数据,区别为一个是浅拷贝,只拷贝外部数据,外部内存地址不同,内部数据的内存地址共享,深拷贝拷贝外部数据和内部数据,若内部数据为可变类型则指向不同,不可变则指向相同
如下可看出,拷贝对象b的值与被拷贝对象a相同,但是内存指向不同,但是这里需注意:浅拷贝是拷贝外部的内存地址以及对应的值,内部数据不会进行拷贝,通俗的讲:浅拷贝时,a,b外部数据内存地址不同,但是内部数据的内存地址共享,且内部数据不区分是否可变类型,内部数据为可变类型或不可变类型,a,b指向的内存地址均指向同一地址
深拷贝和浅拷贝的区别在于,a,b外部数据地址指向不同,内部数据若为不可变类型,则指向同一地址,若为可变类型则指向不可内存地址
a = [1,2,3,[5,6,7]]
b = a.copy()
print('外部数据:\na的内存地址为%s \nb的内存地址为%s'%(id(a),id(b)))
print(a,b)
print('内部数据为不可变类型:\na的内存地址为%s \nb的内存地址为%s'%(id(a[1]),id(b[1])))
print('内部数据为可变类型:\na的内存地址为%s \nb的内存地址为%s'%(id(a[3]),id(b[3])))
import copy
print('='*50)
a = [1,2,3,[5,6,7]]
b = copy.deepcopy(a)
print('外部数据:\na的内存地址为%s \nb的内存地址为%s'%(id(a),id(b)))
print(a,b)
print('内部数据为不可变类型:\na的内存地址为%s \nb的内存地址为%s'%(id(a[1]),id(b[1])))
print('内部数据为可变类型:\na的内存地址为%s \nb的内存地址为%s'%(id(a[3]),id(b[3])))
运行结果
count()
同字符串中count()方法一致,统计元素在列表中出现的次数,有则返回对应出现的次数,int类型,无则返回0
a = [1,1,1,2,3,4,5]
print(a.count(1))
print((a.count('a')))
extend()
extend() 函数用于在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
list.extend(seq)
- seq -- 元素列表,可以是列表、元组、集合、字典,若为字典,则仅会将键(key)作为元素依次添加至原列表的末尾。
a = ['hello','鸿蒙']
b = {'a':1,'b':2}
ff = a.extend(b)
print(ff)
print(a)
运行结果
index()
index方法同字符串使用相同,检查元素是否在列表中,可指定范围,有则返回元素第一次出现的索引值,若没有则报错
ll = [1,1,2,3,4,5]
print(ll.index(1))
print(ll.index(''))
运行结果
insert()
insert() 函数用于将指定对象插入列表的指定位置。该方法没有返回值,但会在列表指定位置插入对象。
list.insert(index, obj)
- index -- 对象 obj 需要插入的索引位置。
- obj -- 要插入列表中的对象。
aList = [123, 'xyz', 'zara', 'abc']
aList.insert(3, 2009)
print(aList)
运行结果
pop()
pop() 函数用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值。该方法返回从列表中移除的元素对象。
list.pop([index=-1])
- index -- 可选参数,要移除列表元素的索引值,不能超过列表总长度,默认为 index=-1,删除最后一个列表值。
list1 = ['Google', 'Runoob', 'Taobao']
print(list1.pop())
print ("列表现在为 : ", list1)
print(list1.pop(1))
print ("列表现在为 : ", list1)
运行结果
remove()
remove() 函数用于移除列表中某个值的第一个匹配项。该方法没有返回值但是会移除列表中的某个值的第一个匹配项。
list.remove(obj)
- obj -- 列表中要移除的对象。
list1 = ['Google', 'Runoob', 'Taobao', 'Baidu']
print(list1.remove('Taobao'))
print ("列表现在为 : ", list1)
list1.remove('Baidu')
print ("列表现在为 : ", list1)
运行结果
reverse()
reversed 函数返回一个反转的迭代器。该方法无返回值,但是会修改原来的列表。
a = [1,2,3,4,5]
print("原数据为:%s"%a)
print(a.reverse())
print("翻转后的数据为:%s"%a)
运行结果
sort()
sort() 函数用于对原列表进行排序,如果指定参数,则使用比较函数指定的比较函数。该方法没有返回值,但是会对列表的对象进行排序。
list.sort( key=None, reverse=False)
- key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
- reverse -- 排序规则,reverse = True 降序, reverse = False 升序(默认)。
key用的较少,会用reverse升序降序排序即可
b = [99,78,1,2,3,4,5]
b.sort()
print(b)
c = ['a','c','b','d']
c.sort()
print(c)
# a = [1,2,3,'a','b','c']
# a.sort() # 不能同时对不同数据类型的数据进行排序,只能对同一种类型的数据进行排序,否则报错 TypeError: '<' not supported between instances of 'str' and 'int'
运行结果