05_Python 列表

这几天忙着做Python项目开发,耽搁了一些时间,今天来完整地写一下Python列表部分的笔记。

1.列表的创建

创建列表有[]和list()两种方法。[]方法用于直接创建列表,list()方法用于将其他可直接转化为列表的可迭代对象转化为列表。
关于列表的几点注意事项:

  • 列表中的元素可以为数字、字符串、列表、元组、字典、集合、对象等等。
  • 列表中的元素及其数据类型都可以被改变(列表中整个元组可以被改变,但不能直接修改元组中的元素)。
  • 列表中所有元素的数据类型及其大小可同可不同。

创建空列表

list1 = []		# []
list2 = list()	# []

创建一维列表

list1 = [1,2,3,4,5]
list2 = ["A","B","C","D","E"]

map_object = map(str,list1)
list3 = list(map_object)
print(map_object,type(map_object))  # <map object at 0x000001C017D65FA0> <class 'map'>
print(list3)  						# ['1', '2', '3', '4', '5']

dict_data = {"A":1,"B":2,"C":3,"D":4}
keys = dict_data.keys()
key_list = list(keys)
print(keys,type(keys))  # dict_keys(['A', 'B', 'C', 'D']) <class 'dict_keys'>
print(key_list)         # ['A', 'B', 'C', 'D']

创建二维列表

list1 = [[1,2,3],[4,5,6],["A","B"]]
print(list1)
# [[1, 2, 3], [4, 5, 6], ['A', 'B']]

创建复杂列表

list1 = [["A","B",1],True,3.14,{"a":1,"b":2,"c":3},(2.5,3.5)]
print(list1)  # [['A', 'B', 1], True, 3.14, {'a': 1, 'b': 2, 'c': 3}, (2.5, 3.5)]


2.列表的索引和切片

一维列表的索引和切片

索引或切片说明
a[i]取列表第i个字符(i>=0为正序,i<=-1为逆序)
a[i:k]取列表第i~第k-1位置的元素。当k>len(a)时,取第i个位置及其后面的所有元素。
a[i:-1]取列表第i~倒数第2个元素。
a[i::]取列表第i个位置及其后面的所有元素。
a[i:len(a)]取列表第i个位置及其后面的所有元素。
a[::-1]列表逆序。
data = ["A","B","C","D","E"]
print(data[2])            # C
print(data[-1])           # E
print(data[0:3])          # ['A', 'B', 'C']
print(data[1:-1])         # ['B', 'C', 'D']
print(data[1::])          # ['B', 'C', 'D', 'E']
print(data[1:len(data)])  # ['B', 'C', 'D', 'E']
print(data[1:10])         # ['B', 'C', 'D', 'E']
print(data[::-1])         # ['E', 'D', 'C', 'B', 'A']

二维及多维列表的索引

list[i] [j] …[n] ==>先通过[i]定位到第i个元素,再通过[j]访问第i个元素(子列表)中的第j个元素,依次类推下去。

list1 = [[1,2,3,4,5],["A","B","C","D"],[10,11,12,13]]
print(list1[1])     # ['A', 'B', 'C', 'D']
print(list1[1][2])  # C


3.列表的循环遍历

data = ["A","B","C","D","E"]
## 按索引遍历
for idx in range(len(data)):
    print(data[idx],end="  ")
else:
    print()
# A  B  C  D  E  

## 按值遍历
for value in data:
    print(value,end="  ")
else:
    print()
# A  B  C  D  E 
    
## 同时按索引和值遍历
for idx,value in enumerate(data):
    print(idx,value)
"""
0 A
1 B
2 C
3 D
4 E
"""


4.列表的常用操作

在这里插入图片描述

4.1 查找

方法说明
list[i]访问列表的某个位置的值。
index(value,start=0)查找value是否在列表中,是则返回第1个索引;否则,报错。start=0表示从第0个位置开始查找。
count(value)统计列表中value出现的次数。value在列表中则返回其出现的次数,不在则返回0。
len(list)计算列表的长度。
in判断一个元素是否在列表中。在则返回True;否则,返回False。
not in判断一个元素是否不在列表中。不在则返回True;否则,返回False。
data = [1,2,3,4,5,6,7,2,3,4,2,5]
print(data[2])      # 3
print(len(data))    # 12

find_value = 3
try:
    idx = data.index(find_value)
    print("{}对应的第一个索引为{}".format(find_value,idx))
    # 3对应的第一个索引为2
except:
    print("{}不在data中".format(find_value))

print(data.count(2))  # 3

print(6 in data)      # True
print(6 not in data)  # False


4.2 增加

方法说明
append(object)将整个对象添加到列表尾部。object可为单个值或可迭代对象。
extend(iterable)将可迭代对象中的元素一个个添加到列表尾部。iterable不能为单个值。
insert(index,object)在第index个索引前插入对象object。
list1 = ["A","B","C","D"]
list1.append("E")
print(list1)  # ['A', 'B', 'C', 'D', 'E']

list1.append([1,2,3])
print(list1)  # ['A', 'B', 'C', 'D', 'E', [1, 2, 3]]

list2 = ['A', 'B', 'C', 'D', 'E']
list2.extend([1,2,3])
print(list2)  # ['A', 'B', 'C', 'D', 'E', 1, 2, 3]

list3 = ["A","B","C","D"]
list3.insert(2,10)
print(list3)  # ['A', 'B', 10, 'C', 'D']

list3.insert(-1,[1,2,3])
print(list3)  # ['A', 'B', 10, 'C', [1, 2, 3], 'D']


4.3 修改

方法说明
list[i] = value修改列表第i个位置的值
reverse()列表逆序。[::-1]逆序,返回列表副本。
sort(key=None,reverse=False)列表排序,reverse=False默认升序。
sorted(key=None,reverse=False)Python内置排序函数,reverse=False默认升序。返回排序副本。
list1 = [1,2,3,4,5]
list1[2] = "A"
print(list1)        # [1, 2, 'A', 4, 5]

list1.reverse() 
print(list1)        # [5, 4, 'A', 2, 1]
new_list = list1[::-1]
print(new_list)     # [1, 2, 'A', 4, 5]


list2 = [2,4,1,7,2,5]
list2.sort()
print(list2)        # [1, 2, 2, 4, 5, 7]

list3 = [2,4,1,7,2,5]
new_list = sorted(list3)
print(new_list)     # [1, 2, 2, 4, 5, 7]

有关排序函数参数key=None的用法可查看sorted()的详细用法。关于sorted()的详细用法可查看我的这一篇博文尾页。02_Python常用内置函数


4.4 删除

方法说明
delPython内置函数,删除整个列表对象。
pop(index=-1)删除列表第index个元素,index=-1默认删除尾部元素。
remove(value)删除列表中的value值,如果value不在列表中则报错。
clear()清除列表,清除后列表变为空列表。
list1 = [1,2,3]
del list1
# print(list1)  
# NameError: name 'list1' is not defined

list2 = [1,2,3,4,5]
list2.pop()
print(list2)  # [1, 2, 3, 4]
list2.pop(1)
print(list2)  # [1, 3, 4]

list3 = [1,2,3,4,5,1,2,3,4,5]
list3.remove(2)
print(list3)  # [1, 3, 4, 5, 1, 2, 3, 4, 5]

#list3.remove(10)  
# ValueError: list.remove(x): x not in list

list3.clear()
print(list3)  # []


4.5 拷贝

拷贝方式说明
=浅拷贝,不产生新的内存空间,只是给对象的引用起别名。
copy()深拷贝,产生新对象和新的内存空间。
data1 = [1,2,3,4,5]
data2 = data1
print(data1,data2)    # [1, 2, 3, 4, 5] [1, 2, 3, 4, 5]
print(id(data1))      # 1924539022272
print(id(data2))      # 1924539022272

data3 = data1.copy()  
print(data1,data3)    # [1, 2, 3, 4, 5] [1, 2, 3, 4, 5]
print(id(data1))      # 1924539022272
print(id(data3))      # 1924544571968 ==> 产生新对象


5.列表与字符串、元组、字典、集合、对象的相互转化

本部分在项目开发中非常有用,能熟练使用的话会使我们写的代码变得非常精简。
列表<==>字符串

# 列表转换为字符串
list_to_str1 = "".join(["1","2","3","4","5"])
list_to_str2 = "".join(map(str,[1,2,3,4,5]))
print(list_to_str1,type(list_to_str1))  # 12345 <class 'str'>
print(list_to_str2,type(list_to_str2))  # 12345 <class 'str'>

# 字符串转换为列表
string = "ABCDEF"
str_to_list = [s for s in string]
print(str_to_list)  # ['A', 'B', 'C', 'D', 'E', 'F']

列表<==>元组

# 列表转换为元组
list1 = [1,2,3,4,5]
list_to_tuple = tuple(list1)
print(list_to_tuple)  # (1, 2, 3, 4, 5)

# 元组转化为列表
tuple1 = (1, 2, 3, 4, 5)
tuple_to_list = list(tuple1)
print(tuple_to_list)  # [1, 2, 3, 4, 5]

列表<==>字典

# 列表转化为字典
key_list = ["A","B","C","D","E"]
value_list = [1,2,3,4,5]
dict_data = dict(zip(key_list,value_list))
print(dict_data)
# {'A': 1, 'B': 2, 'C': 3, 'D': 4, 'E': 5}

# 字典转化为列表
dict_data = {'A': 1, 'B': 2, 'C': 3, 'D': 4, 'E': 5}
key_list = list(dict_data.keys())
value_list = list(dict_data.values())
print(key_list)    # ['A', 'B', 'C', 'D', 'E']
print(value_list)  # [1, 2, 3, 4, 5]

列表<==>集合

# 列表转换为集合
list1 = [1,2,6,2,2,3,5,3,7]
list_to_set = set(list1)  # 去掉重复元素
print(list_to_set)  # {1, 2, 3, 5, 6, 7}

# 集合转换为列表
new_list = list(list_to_set)
print(new_list)     # [1, 2, 3, 5, 6, 7]

列表<==>对象

# list与map对象转换
list1 = [1,2,3,4,5]
map_object = map(str,list1)
new_list = list(map_object)
print(map_object)  # <map object at 0x000001C017C6A2B0>
print(new_list)    # ['1', '2', '3', '4', '5']

# list与filter对象
greater = lambda num: num > 10
list2 = [1,5,12,3,17,24,9]
filter_object = filter(greater,list2)  # 筛选列表中大于10的数
new_list = list(filter_object)
print(filter_object)  # <filter object at 0x000001C017DD1BB0>
print(new_list)       # [12, 17, 24]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值