列表

列表是什么

列表是由一系列按特定顺序排列的元素组成,在python中使用[]括号来表示列表,并用逗号来分隔其中的元素。

例:

heros  = ['an琪拉',"鲁班7号","亚瑟"]

print(heros)

访问列表元素

列表是有序集合,因此要访问列表的任何元素,只需要将元素的位置或索引告诉python即可,,要访问列表元素,可以指定列表名称,再指出元素的索引,将其放在方括号内。

例:

heros  = ['an琪拉',"鲁班7号","亚瑟"]

print(heros[0])

#访问列表元素的语法,当你请求列表元素时,python返回该元素,但是不包括括号和引号。

还可以使用之前学到的转换字符串大小写,用来格式化;

例:

heros  = ['an琪拉',"鲁班7号","亚瑟"]

print(heros[0].title())#首字母进行了大写

索引是从0开始而不是1

在python中,第一个列表元素的索引为0,而不是1。在大多数编程语言中都是如此,这与列表操作的底层实现相关。

第二个列表元素的索引为1,根据这种简单的计数方式,要访问任何元素,都可以在其位置减1,并将结果作为索引。例:要访问第4个元素,使用的索引为3。

例:

heros  = ['an琪拉',"鲁班7号","亚瑟",'兰陵王']

print(heros[3])

python为访问最后一个元素提供了特殊的语法。可以通过负索引,来返回列表的最后一个元素。

例:返回最后一个元素

heros  = ['an琪拉',"鲁班7号","亚瑟",'兰陵王']

print(heros[-1])

print(heros[-2])#返回倒数第二个元素,以此类推

使用列表中的各个值

可以像使用其他变量一样使用列表中的各个值。例如,你可以使用拼接根据列表中的值来创建消息。

例:

heros  = ['an琪拉',"鲁班7号","亚瑟",'兰陵王']

message7 = ' 是新手很喜欢的英雄'

print(heros[-1] + message7)


练习:

#练习20 将一些朋友的姓名存储在一个列表中,将其命名为names 依次访问列表中的每个元素,

# 从而将每个朋友姓名依次打印出来

names = ['jack','luse','li','may']

print(names[0],names[1],name[2],name[3])

#练习21 问候语,继续使用姓名列表,

# 但是不打印每个人的姓名,而是给每个人打印一条消息。每条消息都包含相同的问候语

names = ['jack','luse','li','may']

print(names[0] +  ' 新年快乐')

print(names[1] +  ' 新年快乐')

print(names[2] +  ' 新年快乐')

print(names[3] +  ' 新年快乐')

#练习22 自己的列表,想想自己喜欢的通勤方式,例如骑摩托车或者开汽车,

# 并创建一个包含多种通勤方式的列表,根据该列表打印一个有关通勤方式的宣言

commuting_mode = ['drive a car','Cycling' ,'run']

print(commuting_mode[0] + ' 时间最短')

print(commuting_mode[1] + ' 速度第二')

print(commuting_mode[2] + ' 速度最慢')



修改、添加、删除元素

修改列表元素

修改列表元素与访问列表元素语法类似。要修改的列表元素,可以指定列表名和要修改的元素索引,再指定该元素的新值。

例:

heros = ['安琪拉','亚瑟','李白']

heros[0] = '鲁班'

print(heros)#此时输出结果,列表的第一个元素变成了鲁班

在列表末尾添加元素

在列表中添加新元素时,最简单的方式是将元素附加到列表末尾。给列表附加元素时,默认添加到列表末尾。

例:

heros = ['安琪拉','亚瑟','李白']

heros.append('项羽')

print(heros)#此时输出,可以看到项羽被添加到列表的最后


创建一个空列表, 将元素全部添加到列表中

例:

heros = []

heros.append('钟馗','虞姬','阿古朵','司空震')

print(heros)#此时报错ypeError: list.append() takes exactly one argument (4 given),因为append一次只能添加一个元素

修改后:

heros = []

heros.append('钟馗')

heros.append('司空震')

heros.append('阿古朵')

heros.append('虞姬')

print(heros)

在列表中插入元素

使用方法insert()可以在任何位置添加新元素。为此,需要指定新元素的索引值。

例:

heros = ['安琪拉','亚瑟','李白']

heros.insert(1,'孙斌')

print(heros)#此时输出,索引1变成了孙斌,其他元素向右移了一位

从列表中删除元素

●使用del语句删除元素

知道删除的元素在列表中的位置,可以使用del语句删除

例:

heros = ['安琪拉','亚瑟','李白']

del heros[0]

print(heros)

注意:使用del删除元素后,就无法再访问到元素了

●使用方法pop()弹出元素

如果想把元素从列表中删除,但是还需要使用它的值,可以使用pop方法进行删除,默认删除列表最后一个元素

因为列表就像是一个栈,删除列表末尾的元素相当于弹出栈顶元素。

例:

heros = ['安琪拉','亚瑟','李白']

heros_pop = heros.pop()#删除的元素可以赋值给新的变量

print(heros_pop)

弹出列表中的任何位置的元素

在pop()方法中指定元素的索引即可弹出任何位置的元素

例:

heros = ['安琪拉','亚瑟','李白']

heros.pop(1)#弹出列表第2个元素

print(heros)

通过事例,我们可以根据使用场景,选择删除元素,还是弹出元素。

根据值删除元素

有时候,我们不知道列表中要删除元素的位置,只知道要删除的元素。可以使用remove()方法。

例:

heros = ['安琪拉','亚瑟','李白']

heros.remove('李白')

print(heros)#可以看到元素值为李白的元素被删除

注意:

•remove方法也是弹出,弹出后的值可以存储到变量中。

•remove只能删除一次,如果列表中出现多次要删除的值,需要循环删除。

练习:

#练习31  如果你可以邀请任何人一起共进晚餐,你邀请那些人?请创建一个列表,其中包含3个你要邀请的人,

# 然后使用这个列表打印消息,邀请这些人来与你共进晚餐

names = []

names.append('老王')

names.append('老张')

names.append('老李')

print(names)

print(names[0] + ' 来吃饭')

print(names[1] + ' 来吃饭')

print(names[2] + ' 来吃饭')

print(names[0] + ' 有事儿,不能来吃饭')

#练习32 修改要求嘉宾名单,你刚得知有一个嘉宾无法参加,因此需要邀请另一位。

# 修改邀请名单 将无法参加的嘉宾,更换

# 再打印一次邀请

names[0] = '老吴'

print(names[0] + ' 来吃饭')

print(names[1] + ' 来吃饭')

print(names[2] + ' 来吃饭')

print('找到了一个大的餐桌,所以可以再来三个人')

#练习33 得到消息,有了一个大的包间,还可以再邀请3位

names.insert(0,'老刘')#老刘在第一位

names.insert(0,'老钱')#老钱在最新的人前

names.append('老赵')#老赵最后

print(names[0] + ' 来吃饭')

print(names[1] + ' 来吃饭')

print(names[2] + ' 来吃饭')

print(names[3] + ' 来吃饭')

print(names[4] + ' 来吃饭')

print(names[5] + ' 来吃饭')

print('因为食材不足,只能邀请两人了')

#练习34 缩减名单,因为新购买的食材不足 

# 在33练习后,打印一条消息,只能邀请两人用餐。

# 使用pop不断的弹出嘉宾,直到剩下两人,每次弹出消息都要发送抱歉

a= names.pop()

print(a + '抱歉')

b = names.pop()

print(b + '抱歉')

c = names.pop()

print(c + '抱歉')

d = names.pop()

print(d + '抱歉')

#对于剩下的两位,每一位打印一条消息

print(names[0]+ ' 来吃饭')

print(names[1] + ' 来吃饭')

#使用del将最后两位嘉宾,程序结束时,名单为空

del names[0]

del names[0]

print(names)

组织列表

在创建列表中,元素的顺序是无法预测的,所以需要对列表进行排序。

使用sort()方法对列表进行永久排序

python中的sort()方法可以对列表进行排序。

例如:

我们有一个英雄列表,想让英雄按照字母进行排序

heros = ['ya瑟','an琪拉','zhong馗','lu班']

print(heros)

heros.sort()

print(heros)

print(heros)

注意:sort()方法是永久排序

也可以使用sort()方法进行倒叙,sort()方法提供了reverse=True

heros = ['ya瑟','an琪拉','zhong馗','lu班']

print(heros)

heros.sort(reverse=True)

print(heros)

print(heros)


使用函数sorted()对列表进行临时排序

要保留列表元素原来的排列顺序,可以使用函数sorted()

例:

heros = ['ya瑟','an琪拉','zhong馗','lu班']

print(sorted(heros))

print(heros)#原始列表顺序未更改

sorted()方法也支持倒叙,可以传入reverse=True

倒着打印列表

想要反转列表元素的排列顺序,可以使用reverse()

例:

heros = ['ya瑟','an琪拉','zhong馗','lu班']

print('原始数据',heros)

heros.reverse()

print(heros)

注意:reverse()方法不是按照字母进行排序,而是直接将列表倒过来

确定列表的长度

使用函数len()方法,可以快速获取列表的长度。

heros = ['ya瑟','an琪拉','zhong馗','lu班']

print(len(heros))#可以看到输出元素长度为4

注意:len()方法的计算是从1开始,所以不需要 +1 

练习:

#放眼世界,想出5个想要去的国家

#将这些国家放在一个列表中,并确保国家不是按照字母顺序排列的

countrys = ['U.S.A', 'Germany','U.S','Japan','India']

#按原始排序打印该列表,不要考虑输出是否整洁

print(countrys)

#使用sorted()安字母顺序打印这个列表,同时不要修改它

print(sorted(countrys))

#再次打印该列表,核实排列顺序未变

print(countrys)

#使用sorted()按照字母顺序相反的顺序打印这个列表,同时不要修改它

print(sorted(countrys,reverse=True))

#再次打印该列表,核实排列顺序未改变

print(countrys)

#使用reverse()方法修改列表元素排列顺序,打印该列表,核实排列顺序改变

countrys.reverse()

print(countrys)

#再使用reverse()方法修改元素排列顺序,打印该列表,核实已经恢复到原来的排列顺序

countrys.reverse()

print(countrys)

#使用sort()修改该列表,使其元素按照字母顺序排列,打印该列表,核实排列顺序确实变了

countrys.sort()

print(countrys)

#使用sort()修改该列表,使其元素按照与字母顺序相反的顺序排列,打印该列表,核实排列顺序确实变了

countrys.sort(reverse=True)

print(countrys)

扩展:

尝试用各个函数,储存到列表,如:山丘,河流,城市,美食,或是你喜欢的任何东西,要求使用所有学到的函数来处理这个列表。

操作列表

你已经学习了操作列表中的元素,现在你可以学习如何遍历整个列表,这样只需要几行代码,无论多长的列表,都能高效的处理。

遍历整个列表

现在我们使用for循环进行遍历列表。

例:

countrys = ['U.S.A', 'Germany','U.S','Japan','India']

for country in countrys:

    print(country)

深入研究循环

理解循环的概念很重要,因为它是计算机自动完成重复工作的常见方式之一。

countrys = ['U.S.A', 'Germany','U.S','Japan','India']

for country in countrys:#这行代码让python获取列表countrys中的第一个值,并把值存储到变量country中,

    print(country)#然后python读取代码,后续依次执行

在for循环中执行更多的操作

在for循环中,可以对每个元素执行任何操作。可以包含多少行代码都可以,for循环对于执行多个元素的列表很好用。

例:

countrys = ['U.S.A', 'Germany','U.S','Japan','India']

for country in countrys:

    print(country.lower() + '是美丽的国家')

在for 循环之后要做的操作

for循环之后怎么做什么?通常我们进行总结性的输出或者接着执行程序晚期必须完成的任务。

for 循环后面,没有缩进的代码,只执行一遍,不会进行重复执行。

例:

heros = ["李白","安琪拉","钟馗",'亚瑟']

for i in heros:

print(i)

print('争取早日上王者吧')#可以看到,放在for循环之外的代码,执行了一遍

避免缩进错误

●对于for循环之后的语句属于for循环的部分代码,一定要缩进,如果你忘记了缩进会报错:

IndentationError: expected an indented block

●但是,也会出现没有缩进,但是程序没有报错的情况,但是这时的输出,可能不是你想要的结果。出现了逻辑错误

●如果你把不必要缩进的代码,放在了for循环内,也会导致逻辑错误

●for循环后,需要是用:号结尾,然后下一行编写要循环的代码。

创建数值列表

使用函数range()

python提供了range()函数,可以让我们轻松生成一系列的数字。

例:

for i in range(10):

print(i)

使用range()方法生成数字列表

要创建数字列表,可以使用list()方法。将range()的结果转换为列表。将range()作为list()的参数,输出为一个数字列表。

例:

num_list = list(range(10))

print(num_list)


使用range()函数时,可以指定步长

例:

for i in range(0,10,2):#循环生成0-10,步长为2的数值

    print(i)


range()方法几乎可以实现所有的数值列表。

例:创建一个1-10的平方的数值,python中**代表乘方运算

num_power = []

for i in range(1,11):

    num = i**2

    num_power.append(num)

print(num_power)

对于数字列表执行简单的统计计算

python提供了内置函数,可以轻松的计算出数字列表的最大值,最小值,总和。

例:

#求和

nums = [100,232,321,11,123]

print(sum(nums))

#求最大

print(max(nums))

#求最小

print(min(nums))

列表推导式(列表解析)

我们通过前面的例子,已经可以使用3、4行代码去生成我们想要的数值列表,这里作为提升,我们介绍一下列表推导式,它可以使用一行代码让我们完成需要的任务。

例:我们需要生成1-10的乘方数字

num_power =  [i ** 2 for i in range(1,11) ] 

print(num_power)

语法解析:

首先我们需要,使用一个列表名,然后指定一个左[,并定义一个表达式,用于我们需要存储到列表中的值,这个例子中,是i**2 求值得平方然后编写一个for循环用于给表达式提供数值最后加上右]作为结尾

注意:●这里的for循环没有:结尾

●推到是需要多加练习,可以提升你的代码效率

练习:

#数到20:使用一个for 循环打印数字1-20(含)

for i in range(1,21):

    print(i)

#创建一个列表,其中包含数字1-100000在使用一个for循环将这些数字打印出来

nums = list(range(1,100001))

print(nums)

#创建一个列表,包含数字1-100000.再用min max核实开头和结尾是1和100000 sum求出和

nums1 = list(range(1,100001))

print(min(nums1))

print(max(nums1))

print(sum(nums1))

#通过函数range()方法,计算1-20奇数 再使用for循环打印

for a in range(1,21,2):

    print(a)

#创建一个列表,包含3-30内能被3整除的数字,使用for循环打印

nums_ji =[]

for n in  range(3,31):

    if n % 3 == 0:

        nums_ji.append(n)

print(nums_ji)

#一个数字乘3次被称为立方,Python中使用**3表示,创建一个列表包含前1-10的立方,使用for循环打印

for i in range(1,11):

    i  = i**3

    print(i)

#使用列表解析生成列表,包含1-10的立方

nums1_li = [i**3 for i in range(1,11) ]

print(nums1_li)

使用列表的一部分

在工作中,如果我们只需要使用列表的一部分内容,我们处理这部分的内容被称为列表的切片

切片

创建要切片的列表,可以使用第一个元素和最后一个元素的索引。与range()函数一样,例如要输出0-2的元素,值为0、1、2。

例:

heros = ['李白','孙尚香','后裔','白起']

print(heros[0:2])

●如果没有指定索引[:],python会从开头切到结尾

●如果想要最后3个元素,可以使用负值 [-3:0]

●切片之后的数据类型是list

遍历切片

可以使用for循环进行切片后进行元素遍历

例:

heros = ['李白','孙尚香','后裔','白起']

print(heros[:])

print(type(heros[:]))#可以看到切片后的类型是list

for hero in heros[-3:]:

print(hero)

复制列表

如果使用列表的过程中,我们需要创建全新的列表,可以使用切片,起第一个元素始最后一个元素。

例:

heros = ['李白','孙尚香','后裔','白起']

heros_new = heros[:]

print(heros_new)

heros.append('孙斌')#为了证明我们现在有两个列表,向原始列表添加新的元素

print(heros)

print(heros_new)#复制的列表没有新元素




顶顶顶

你可能感兴趣的:(列表)