python基础06 -- 列表(list)

1. 列表概念 

python的中高级数据类型:列表(list)、字典(dict)、集合(tupe)

什么是列表?

在实际开发中,经常需要将一组(不只一个)数据存储起来,以便后边的代码使用。

列表就是这样的一个数据结构。

列表用[ ]中号来标识,相邻元素之间用逗号,分隔。
不同于C,java等语言的数组,python的列表列表内部的元素可以是任意类型的

1.1 创建列表

names = ["张三","李四","王五","Abc",123,"^"]
print(names)

#输出:
['张三', '李四', '王五', 'Abc', 123, '^']

2. 列表的基本操作

列表是 Python 序列的一种

我们可以使用索引(ndex)访问列表中的某个元素(得到的是一个元素的值)

也可以使用切片访问列表中的一组元素 (得到的是一个新的子列表)。

列表索引也分为正索引(从0开始)、负索引(从-1开始),如下图所示:

列表的元素访问:

names = ["张三","李四","王五","Abc",123,"^"]
print(names[0])   #取列表中第一个元素
print(names[3])   #取列表中第三个元素

#输出:
张三
Abc

 列表切片:

切片即根据列表元素的索引,取出多个元素,可以同时取多个

[ 起始索引 :结束索引 :步长]

切片后得到一个新的列表:

names = ["张三","李四","王五","Abc",123,"^"]
print(names[0:2])    #取1~3的3个元素,步长默认为1,可省略
print(names[1:4])    #取2~3的2个元素
print(names[-3:])    #取最后3个元素,结束索引也可省略
print(names[1:5:2])  #每2个元素中取1个
print(names[:])      #取出所有元素

#输出:
['张三', '李四']
['李四', '王五', 'Abc']
['Abc', 123, '^']
['李四', 'Abc']
['张三', '李四', '王五', 'Abc', 123, '^']



print(names[:7])   #切片时超出索引,不会报错
#输出:仍输出所有元素
['张三', '李四', '王五', 'Abc', 123, '^']

 in操作:

判断某个元素是否在列表中,元素必须完全匹配,返回的是bool值

如下:

names = ["张三","李四","王五","Abc",123,"^"]
print("张三" in names)
print("四" in names)

#输出:
True
False(由于“四”和“李四”不完全匹配,所以返回false)

列表拼接:

列表属于可变数据类型

因此可以进行增、删、改,也可以像字符串一样进行拼接,得到一个新的列表

示例如下:

l1 = ["张三","李四","王五"]
l2 = [23,26,28]
print(l1+l2)

#输出:
['张三', '李四', '王五', 23, 26, 28]

创建数字列表

使用range() 创建数字列表

要创建数字列表,可使用函数list() 将range() 的结果直接转换为列表。

如果将range() 作为list() 的参数,输出将为一个数字列表。

将这些数字转换为一个列表,可使用list() 

示例如下:

numbers = list(range(1,6))
print(numbers)

#输出:
[1, 2, 3, 4, 5]

使用函数range() 几乎能够创建任何需要的数字集

例如,如何创建一个列表,其中包含前10个整数(即1~10)的平方呢?在Python中,两个星号(** )表示乘方运算。

squares = []
for value in range(1,11):
    squares.append(value**2)
print(squares)


#输出:
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
对数字列表做简单的计算

有几个专门用于处理数字列表的Python函数。

例如,你可以轻松地找出数字列表的最大值、最小值和总和:

digits = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
print(min(digits))
print(max(digits))
print(sum(digits))


#输出:
0
9
45
列表解析:

前面介绍的生成列表squares 的方式包含三四行代码

而列表解析让你只需编写一行代码就能生成这样的列表。

列表解析将for 循环和创建新元素的代码合并成一行,并自动附加新元素。

代码示例如下:

squares = [value**2 for value in range(1,11)]
print(squares)

#输出:
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

3. 列表的内置方法

内置方法,可以帮助我们对列表对象的数据元素进行管理(增删改查)

计算列表元素长度:

求列表元素的长度,可以使用len(列表名)

names = ["张三","李四","王五","Abc",123,"^"]
print(len(names))

#输出:
6

添加列表元素:

添加元素,一个有三个方法:

appen[]:往元素最后追加新的元素

insert[]:可在列表的任何位置添加新元素,因此需要指定新元素的索引和值。

exten[]:列表合并,原有列表的数据元素会发生变化

l = [1,2,3,4,5,6]
l.append(7)
print(l)
#输出:
[1, 2, 3, 4, 5, 6, 7]



l2 = [1,2,3,4,5,6]
l2.insert(0,"张三")
print(l2)
#输出:
['张三', 1, 2, 3, 4, 5, 6]



l3 = [1,2,3]
l4 = [-1,-2,-3]
l3.extend(l4)
print(l3)
#输出:
[1, 2, 3, -1, -2, -3]

删除/修改列表元素:

删除、修改列表元素,一共有4个方法:

remove():删除指定元素

pop(index):按照索引删除元素,返回删除的元素,如果还需要用到,可以用一个变量接收

clear():清空列表元素,保留一个空列表

del 列表名[index]:指定索引删除,索引越界(不存在的索引)会报错

l = ["张三","李四","王五","Abc",123,"^"]
l.remove(123)   #删除指定元素
print(l)
#输出:
['张三', '李四', '王五', 'Abc', '^']



l1 = ["张三","李四","王五","Abc",123,"^"]
l1.pop(-1)   #按照索引删除
print(l1)
#输出:
['张三', '李四', '王五', 'Abc', 123]



l2 = ["张三","李四","王五","Abc",123,"^"]
l2.clear()   #清空列表元素,保留一个空列表
print(l2)
#输出:
[]


l3 = ["张三","李四","王五","Abc",123,"^"]
del l3[1]
print(l3)
#输出:
['张三', '王五', 'Abc', 123, '^']

查看/组织列表元素:

列表中,元素的排列顺序常常是无法预测的,因为你并非总能控制用户提供数据的顺序。

这虽然在大多数情况下都是不可避免的,但你经常需要以特定的顺序呈现信息。

有时候,你希望保留列表元素最初的排列顺序,而有时候又需要调整排列顺序。

Python提供了很多组织列表的方式,可根据具体情况选用。

查看元素的常用方法如下:

sort():对元素永久排序,排序后,列表元素位置会发生变化

sorted():对元素进行临时排序

count():统计某个元素出现的次数,不改变列表

reverse():列表翻转,翻转后,列表元素位置会发生变化

index():查看某个元素的索引位置

具体代码示例如下:

l = [22,12,19,33,100]
l.sort()               #对列表元素永久排序
print(l)
print(l.count(22))     #统计22个元素出现的次数
l.reverse()            #对列表元素进行翻转
print(l)

#输出:
[12, 19, 22, 33, 100]
1
[100, 33, 22, 19, 12]



l2 = [22,12,19,33,100]
print(sorted(l2))       #对列表元素进行临时排序
print(l2)
#输出:从二个输出可以看出,结果还是与原始的元素位置一致
[12, 19, 22, 33, 100]
[22, 12, 19, 33, 100]   




l3 = [22,12,19,33,100]
print(l3.index(12))    #查找12这个元素的位置
#输出:
1

4. 复制列表

经常需要根据既有列表创建全新的列表。

下面来介绍复制列表的工作原理,以及复制列表可提供极大帮助的一种情形。

要复制列表,可创建一个包含整个列表的切片,方法是:

同时省略起始索引和终止索引([:] )。

这让Python创建一个始于第一个元素,终止于最后一个元素的切片,即复制整个 列表。

'''
假设有一个列表:
其中包含你最喜欢的四种食品,而你还想创建另一个列表,在其中包含一位朋友喜欢的所有食品。
不过,你喜欢的食品,这位朋友都喜欢,因此你可以通过复制来创建这个列表:
'''
my_foods = ['pizza', 'falafel', 'carrot cake']

#不指定任何索引的情况下从列表my_foods 中提取一个切片,从而创建了这个列表的副本,再将该副本存储到变量friend_foods中
friend_foods = my_foods[:]  
print("My favorite foods are:")
print(my_foods)
print("\nMy friend's favorite foods are:")
print(friend_foods)


#输出:打印每个列表后,我们发现它们包含的食品相同
My favorite foods are:
['pizza', 'falafel', 'carrot cake']

My friend's favorite foods are:
['pizza', 'falafel', 'carrot cake']

5.列表的遍历

遍历整个列表:

你经常需要遍历列表的所有元素,对每个元素执行相同的操作。

例如:

在游戏中,可能需要将每个界面元素平移相同的距离;

对于包含数字的列表,可能需要对每个元素执行相 同的统计运算;

在网站中,可能需要显示文章列表中的每个标题。

需要对列表中的每个元素都执行相同的操作时,可使用Python中的for 循环。

代码示例如下:

#假设我们有一个魔术师名单,需要将其中每个魔术师的名字都打印出来:
magicians = ['alice', 'david', 'carolina']
for magician in magicians:
    print(magician)


#输出:
alice
david
carolina


#还可以结合列表内置方法,将输出转为大写
print(magician.upper())
#输出:
ALICE
DAVID
CAROLINA

遍历切片:

如果要遍历列表的部分元素,可在for 循环中使用切片。

在下面的示例中,我们遍历前三名队员,并打印他们的名字:

players = ['charles', 'martina', 'michael', 'florence', 'eli']
print("Here are the first three players on my team:")
for player in players[:3]:
    print(player.title())


#输出:
Here are the first three players on my team:
Charles
Martina
Michael

纯数字类型列表,进行求和

num = [12,19,23,42,50,7]
s = 0
for i in num:
    s += i
print(s)

#输出:
153

结合for循环,执行更多操作:

下面来扩展前面的示例,对于每位魔术师,都打印一条消息,指出他的表演太精彩了。

magicians = ['alice', 'david', 'carolina']
for magician in magicians:
    print(magician.title() + ", that was a great trick!")

#输出:
Alice, that was a great trick!
David, that was a great trick!
Carolina, that was a great trick!

下面再添加一行代码,告诉每位魔术师,我们期待他的下一次表演:

magicians = ['alice', 'david', 'carolina']
for magician in magicians:
    print(magician.title() + ", that was a great trick!")
    print("I can't wait to see your next trick, " + magician.title() + ".\n")


#输出:
Alice, that was a great trick!
I can't wait to see your next trick, Alice.

David, that was a great trick!
I can't wait to see your next trick, David.

Carolina, that was a great trick!
I can't wait to see your next trick, Carolina.

在for 循环结束后执行一些操作:

for 循环结束后再怎么做呢?

通常,你需要提供总结性输出或接着执行程序必须完成的其他任务。

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

下面来打印一条向全体魔术师致谢的消息,感谢他们的精彩表演。

想要在打印给各位魔术师的消息后面打印 一条给全体魔术师的致谢消息,

需要将相应的代码放在for 循环后面,且不缩进

magicians = ['alice', 'david', 'carolina']
for magician in magicians:
    print(magician.title() + ", that was a great trick!")
    print("I can't wait to see your next trick, " + magician.title() + ".\n")
print("Thank you, everyone. That was a great magic show!")


#输出:
Alice, that was a great trick!
I can't wait to see your next trick, Alice.

David, that was a great trick!
I can't wait to see your next trick, David.

Carolina, that was a great trick!
I can't wait to see your next trick, Carolina.

Thank you, everyone. That was a great magic show!

列表推导式:

列表推导式(List Comprehension)也被称为列表解析式,是一种用于创建列表的简洁语法结构。它是Python中独特的数据处理方式之一,可以从一个数据序列构建另一个新的数据序列。

列表推导式的格式通常为:[表达式 for 变量 in 列表]

也可以加入条件筛选,格式为:[表达式 for 变量 in 列表 if 条件]

-------->>

下面是结合for循环,没有使用推导式、与使用了推导式的代码示例:

list1 = [1,2,3,4,5,6]           #列表1的元素内容
list2 = []                      #列表2是个空的列表
for item in list1:              #针对列表1做循环
    list2.append(item**2)       #列表2的新增内容为:列表1每个元素的2次幂
print(list2)

#输出:
[1, 4, 9, 16, 25, 36]



#使用列表推导式的简化写法:
list1 = [1,2,3,4,5,6]                     #列表1的元素内容
list2 = []  
list3 = [item**2 for item in list1]       #一行代码的简写
print(list3)
#输出:
[1, 4, 9, 16, 25, 36]

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值