?这两位学长知识讲解到位,真心建议大家学习他们的文章
https://zhuanlan.zhihu.com/p/79541418
https://blog.csdn.net/qq_24502469/article/details/104185122
1、列表的创建
? ? ? 列表的创建是非常基础的一个问题,我们可以直接创建列表。注意创建列表的时候不要和元组弄混了,列表创建的形式是name_list = [? ],但是反观元组使用的是()。此处的无论是a,b,c_list 都只是列表名,自行命名。
a_list = ["原来你也玩原神啊","其实我也是一名原神玩家","原神启动"]
b_list = ["不许你玩原神"]
c_list = ['率土启动']
print(a_list)
print(b_list)
print(c_list)
#本人先声明自己不是一名原神玩家
? ? ? 使用list()创建列表也是可以的。
joker = list() # 创建一个空列表
impact = list(range(6)) # 0,1,2,3,4,5 返回的列表元素从0到6但不包括6
Genshin = list(range(1,6)) # 1,2,3,4,5
start = list(range(0,5,1)) # 0,1,2,3,4
# 这里使用的range函数的基本格式是 range(start,stop,step) step步长默认为1 start开始默认为0
print(joker)
print(impact)
print(Genshin)
print(start)
print(joker+impact+[6])
列表推导式也是一种创建列表的方式,比较简单快捷,格式如下:列表名 = i for i in range(n) 条件]
?此处的for循环是添加5元素的循环次数,当然此处我没有添加条件是因为例题要求无需其他条件。
nums = [5 for i in range(10)] # 列表推导式生成包含十个数字5的列表
print (nums) # 引用的是清华大学出版社出版的董付国python程序设计第三版的一个课后题
?使用列表推导式创建包含0到15以内整数的奇数列表:
joker = [x for x in range(0,16,1) if x%2==1]
print(joker)
?2、列表的常用方法归纳
列表常用方法 | 说明 |
list.append(x) | 将元素x添加到列表尾部 |
list.extend(L) | 列表L中所有元素添加至列表list尾部 |
list.insert(index, x) | 在列表list指定位置index处添加元素x,该位置后面的所有元素后移一个位 |
list.remove(x) | 将列表list中的首次出现的元素x删除,其他前进一个位置 |
list. pop(index) | 将列表下标index的元素弹出(删除),默认的话为最末元素 |
list.clear() | 删除列表中的所有元素,但保留列表 |
list.index(x) | 将列表第一个值为x的元素下标返回,若没有则弹出异常 |
list.count(x) | 返回指定元素x在列表中出现的次数 |
list.reverse(x) | 将列表中元素逆序(元素位置反转) |
list.sort() | 将列表元素默认升序排列,下面有详细解析 |
list.copy() | 返回列表的浅复制 |
3、浅拷贝的个人理解?
list.copy()浅复制的举例应用?,属于浅拷贝的范畴:
man = ["m",[5,2,1],13]
print(man)
new = man.copy()
new[2] = 14
new[1][2] = 0
print(new)
'''
['m', [5, 2, 1], 13]
['m', [5, 2, 0], 14]
'''
列表生成式生成列表也是浅拷贝:
man =["m",[5,2,1],13]
new = [i for i in man]
print(new)
# ['m', [5, 2, 1], 13]
for x循环遍历进行浅复制:
man = ['m', [5, 2, 1], 13]
new = []
for i in range(len(man)):
new.append(man[i])
print(new)
# ['m', [5, 2, 1], 13]
切片浅复制整个列表:
简单切片指的是这样的切片形式:new = man[start:stop],超出有效索引范围会复制包括的元素,start
的位置比stop
还靠后则会复制为空列表。start
的缺省值是无穷小,stop
的缺省值是无穷大,具体可以自行测试。
man = ['m', [5, 2, 1], 13]
new = man[0:3]
print(new)
# ['m', [5, 2, 1], 13] 简单切片,这里切片的知识学习于知乎胡小涂学长
4、深拷贝
使用deepcopy(),则需要使用impact copy(),无则报错。引用CSDN大佬今晚打老虎所说的是“如果用deepcopy()方法,则无论多少层,无论怎样的形式,得到的新列表都是和原来无关的,这是最安全最清爽最有效的方法”。
import copy
man = ['m', [5, 2, 1], 13]
new = copy.deepcopy(man)
print(new)
# ['m', [5, 2, 1], 13]
5、range函数的熟悉与测试:
a=range(6)
print(list(a))
for i in a :
if i ==3:
continue
print("耿晨昊是joker%d"%i)
else:
print("耿晨昊是个飞%d"%i)
for x in "I am Joker耿":
print(x)
if x == "耿":
break
else:
print("耿晨昊是挺joker的") # 遇到耿直接跳出循环,也就没有了耿晨昊是joker的打印
6、教材课后题:列表推导式生成包含10个数字5的列表
nums = [5 for i in range(10)]
print (nums)
print (10*"耿晨昊是纯纯joker\n")
7、列表排序与列表增加元素方法,列表删除:
列表删除后无法打印,打印提示出错。
my_numbers = [10, 8, 3, 22, 33, 7, 11, 100, 54]
# 按升序对列表进行就地排序
my_numbers.sort()
# 打印修改后的列表
print(my_numbers)
# 输出
#[3, 7, 8, 10, 11, 22, 33, 54, 100]
a_list = list((3,5,7,9,11)) #列表创建
print(a_list)
del a_list #列表删除
# x = alist() #创建空列表
aList = [3,4,5]
aList = aList + [7] # 基本的添加方法
#aList[3, 4, 5, 7]
print(aList)
del aList[3]
#a_list[4,5,7] 删除元素
print(aList)
aList = [3,5,7]
alist = aList * 3
print ( alist )
# 列表元素乘法增加元素
8、基础数据类型的转换:
# 转换类型不会破环内容
num_str =str(11)
print(type(num_str),num_str)
# 万物皆可转换字符串,想要将字符串转换成数字,那么双引号内必须均为数字
int_num = int(11.345)
print(type(int_num),int_num)
9、list.sort()
基本格式:list.sort(cmp=None, key=None, reverse=False)
reverse 代表排序规则,若reverse = True?降序,?reverse = False 则升序,默认升序。
以下这个其实在上已经使用过,是默认升序排列,但是我们在这里展示降序排列。
另外两个参数cmp和key不太理解,看的也是一头雾水。
my_numbers = [10, 8, 3, 22, 33, 7, 11, 100, 54]
# 按升序对列表进行就地排序
my_numbers.sort()
# 打印修改后的列表
print(my_numbers)
#[3, 7, 8, 10, 11, 22, 33, 54, 100]
my_numbers.sort(reverse = True)
# 输出
print(my_numbers)
# [100, 54, 33, 22, 11, 10, 8, 7, 3]