python 之列表(list)处理
列表(list)
创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可,一个列表中的数据类型可以各不相同,可以同时分别为整数、实数、字符串等基本类型,甚至是列表、元组、字典、集合以及其他自定义类型的对象
1.创建列表
# 创建一个空列表 list1 = list() # 创建列表中包含各种数据类型列表 list2 = [{"fruit": "水果"}, ("apple", "苹果"), "orange", "橘子", 3.141592654, True, 1] # 使用list()函数将元组、range对象、字符串或其他类型的可迭代对象类型的数据转换为列表 list3 = list(range(10)) list4 = list((1, 2, 3, 4)) list5 = list("banana") print(list1) print(list2) print(list3) print(list4)
2.列表读取
通过下标索引来读取列表中的元素,下标索引从0开始
# 读取第一个元素 data1 = list2[0] print(data1) # 索引不存在,会抛出越界异常 data2 = list2[8] print(data2)
使用for语句遍历读取
for i in list2: print(i)
3.列表修改
通过索引针对性修改
print(list2) # 通过索引指定修改某项元素 list2[0] = "pear" print(list2)
通过append()方法增加元素
print(list2) # 通过append()方法在列表末尾添加列表元素,append()可传入任意数据类型 list2.append(True) list2.append({"pear": "梨"}) print(list2)
通过extend()方法一次性在列表末尾添加一组列表元素,extend()方法只接受一个可迭代的对象作为参数,否则抛出异常'XXXXX' object is not iterable
# 传入str类型 print(list2) list2.extend("ab") print(list2)
print(list2) # 传入range对象 list2.extend(range(0, 8, 2)) print(list2)
print(list2) # 传入列表(list) list2.extend(["what", "why", "when", "how"]) print(list2)
print(list2) # 传入元组(tuple) list2.extend(("fish", "rood")) print(list2)
print(list2) # 传入字典(dict) list2.extend({"1": 1, "2": 2}) print(list2)
# 传入不可迭代对象的参数 list2.extend(3.415) print(list2)
通过insert()方法将指定元素插入列表指定的位置中
print(list2) # 将元素3插入到第一个位置 list2.insert(0,3) print(list2)
4.删除列表
使用pop()方法移除列表中的元素,若不传入参数,则默认移除末尾的元素,并返回所移除的值
print(list2) # 使用pop()方法移除列表中的元素,若不传入参数,则默认移除末尾的元素,并返回所移除的值 data1 = list2.pop(1) data2 = list2.pop() print(data1) print(data2) print(list2)
remove()方法指定移除已知元素,若列表中存在多个与传入的参数值匹配,则移除首个匹配元素,无返回值
print(list2) # remove()方法指定移除已知元素,若列表中存在多个与传入的参数值匹配,则移除首个匹配元素,无返回值 list2.remove('orange') list2.remove(1) print(list2)
使用clear()方法清空列表,无返回值
print(list2) # 使用clear()方法清空列表,无返回值 list2.clear() print(list2)
5.列表切片
切片适用于列表、元组、字符串、range对象等类型,可以使用切片来截取列表中的任何部分,得到一个新列表,也可以通过切片来修改和删除列表中部分元素,甚至可以通过切片操作为列表对象增加元素
格式:[start:end:step]
start: 切片开始位置,默认为0
end: 切片结束位置(不包含结束位置),默认为列表长度
step: 切片的步长,默认为1,当步长省略时可以顺便省略最后一个冒号
正向切片
# 截取整个list slice1 = list2[:] # 截取偶数位置的所有元素 slice2 = list2[::2] # 截取下标在[2,4)间的所有元素 slice3 = list2[2:4] # 截取奇数位置的所有元素 slice4 = list2[1::2] print(slice1) print(slice2) print(slice3) print(slice4)
# 当切片时越界并不会报错,直接访问则会抛出越界异常 slice1 = list2[20:] print(slice1) slice2 = list2[20] print(slice2)
逆向切片
print(slice1)
# 逆序列表
slice1 = list2[::-1]
print(slice1)
print(list2) # 截取倒数第五位之后的所有元素 slice1 = list2[-4:-1] print(slice1)
遍历切片
slice1 = list2[:-1] for i in slice1: print(i)
6.list中其他常用方法
list 中的copy()方法复制列表,等价于切片中[:]
copy_ = list2.copy() slice_ = list2[:] print(copy_) print(slice_)
list 中的count()方法用来统计元素出现的次数
count_ = list2.count(1) print(count_)
统计字符出现的个数或列表内出现的元素次数等也可以用 Counter方法, Counter 是一个 dict 的子类,用于计数可哈希对象
from collections import Counter counter_ = Counter(list3) print(counter_) # 传入含有不可哈希对象列表 count_ = Counter(list2) print(count_)
list 中的index()方法用来查找某个元素所在的索引位置,当列表中有多个相同的元素时,默认返回第一个匹配的元素索引位置,若找不到则抛出异常
格式:[obj, start, end]
obj :需要查找的对象
start: 起始查找位置,不填写时默认为0
end: 结束查找位置,不包含end,不填写时默认为列表长度
print(list2) # 查找列表中元素为1的索引位置 index_ = list2.index(1) print(index_) # 在索引在区间[3,5)中查找元素为1的索引位置 be_ = list2.index(1, 3, 5) print(be_)
reverse()翻转列表,类似切片中的[::-1]
list2.reverse() print(list2)