列表

序列

序列是一块用于存放多个值的连续内存空间,并且按一定顺序排列,每一个值称为元素,每一个元素都能分配到一个数字,称为索引。可通过索引找到元素。

序列结构主要有列表、元组、集合、字典、和字符串

序列中每一个元素都有一个编号,称为索引,索引是从左到右从0开始,也可以从右到左从-1开始。

元素1    元素2    元素3    元素4
0         1        2     3
-4        -3       -2    -1

 

列表的访问

#列表通过[]声明,元素与元素用逗号隔开
names = ['jack','tom','lucky','superman','ironman']

#通过索引下标取值
print(names[0]) #输出为jack
print(names[-1]) #输出为ironman
print(names[len(names)-1]) #输出为ironman

#获取列表的长度
print(len(names)) #输出5

 

列表的切片

可以访问一定范围的元素,通过切片可以生成一个新的序列。

语法

sname[start:end:step]
#sname:序列的名称
#start切片开始的位置,不指定默认为0
#end切片截止的位置(不包括该位置,即包前不包后),不指定默认为序列长度
#step切片的步长,默认为1

案例

#列表的切片
lists = ['hp','dell','thinkpad','lenovo','mac','神州']
print(lists[2:4]) #输出['thinkpad', 'lenovo']
print(lists[-3:-1]) #输出['lenovo', 'mac']
print(lists[::2]) #输出['hp', 'thinkpad', 'mac']
print(lists[::-1]) #输出['神州', 'mac', 'lenovo', 'thinkpad', 'dell', 'hp']

 

序列相加

使用+运算符,前提是相同类型的序列可以相加,如同为列表、元组、集合等,列表中的元素类型可以不同。

str1=[1,2,3]
str2=['a','b','c']
print(str1+str2) #输出[1, 2, 3, 'a', 'b', 'c']

列表跟字符串,列表和元组是不可相加的,因为他们不是同一类型。

 

序列的乘法

使用数字乘以一个序列可生成一个新的序列。

str1=[1,2,3]*2
print(str1) #输出[1, 2, 3, 1, 2, 3]

 

in 跟 not in

in检查某个元素是否存在序列中。

语法格式

value in sequence

案例1

#in可用来做列表的遍历
names = ['jack','tom','lucky','superman','ironman']
for name in names:
    print(name)
---------------执行脚本--------------------
jack
tom
lucky
superman
ironman

案例2

#in跟not in返回的是布尔值
print('tom' in names) #输出True

#查询列表中的值
for name in names:
    if name =='superman'
        print('superman在里面!')
        break
    else:
        print('superman不在里面!')

#第二种方式
if 'superman' in names:
    print('superman在里面!')
else:
    print('superman不在!')

 

len() max() min() 函数

#len()计算序列的长度
names = ['jack','tom','lucky','superman','ironman']
print('序列names的长度为',len(names)) #序列names的长度为 5

#max()计算序列中的最大值
names = [7,14,25,65,48,95,2,54,4]
print('序列names的最大值为',max(names)) #序列names的最大值为 95

#min()计算序列中的最小值
names = [7,14,25,65,48,95,2,54,4]
print('序列names的最小值为',min(names)) #序列names的最小值为 2

 

案例

#求最大值跟最小值
maxValue=list2[0] #先取出一个假设最大值
minValue=list2[2] #先去除一个假设最小值
for value in list2:
    if value >maxValue:
        maxValue=value
    if value < minValue:
        minValue=value
print('最大值是{},最小值是{}'.format(maxValue,minValue))

#求和
sum1=0
for i in range(len(list2)):
    sum1+=list2[i]
print('列表和为:',sum1)

#求和方法二
sum2=0
for value in list2:
    sum2+=value
print('列表和为:',sum2)

#系统sum函数求和
he = sum(list2)
print('列表和为:',he)

 

列表的其他内置函数

函数 说明
list() 将序列转换为列表
str() 将序列转换为字符串
sum() 计算元素和
sorted() 对元素进行排序
reversed() 反向输出序列中的元素
enumerate() 将序列组成一个索引序列,多用于for循环

 更多详情查阅👉Python列表函数&方法

 

列表的遍历

语法1

for item in listname: #依次将列表listname中的元素取出放入item变量中
    print(item)

 

语法2

#enumerate()函数语法格式
for index,item in enumerate(listname):
    print(index,item)
#index:用于保存元素的索引
#item:用于保存元素的值
listname:列表名

 

案例

#enumerate()函数的使用
names = [7,14,25,65,48,95,2,54,4]
for i in enumerate(names):
    print(i)
---------------执行脚本--------------------
(0, 7)
(1, 14)
(2, 25)
(3, 65)
(4, 48)
(5, 95)
(6, 2)
(7, 54)
(8, 4)
#可以看到通过函数enumerate得到的i变量是将每个元素跟索引组成了元组。

#只输出列表中元素的值
names = [7,14,25,65,48,95,2,54,4]
for i in enumerate(names):
    print(i[1])
---------------执行脚本--------------------
7
14
25
65
48
95
2
54
4

#按序输出
names = [7,14,25,65,48,95,2,54,4] 
for index,item in enumerate(names): 
    print(index+1,item)
---------------执行脚本--------------------
1 7
2 14
3 25
4 65
5 48
6 95
7 2
8 54
9 4

 

列表的修改

直接使用赋值运算符修改。

#列表的修改
brands = ['hp','dell','thinkpad','lenovo','mac','神州']
print(brands) #输出['hp', 'dell', 'thinkpad', 'lenovo', 'mac', '神州']
brands[-1]='hasee'

#遍历修改列表值
for i in range(len(brands)):
    if '华为' in brands[i]:
        brands[i]='HUAWEI'
print(brands)

 

列表的删除

语法

del listname

用法

brands = ['hp','dell','thinkpad','lenovo','mac','神州']
del brands[2]#删除thinkpad
del brands #删除整个列表

 

元素值的删除

删除一个不确定其位置的元素,也就是根据元素值删除,可以使用列表的remove()方法。

brands = ['hp','dell','thinkpad','lenovo','mac','神州']
brands.remove("mac")
print(brands) #输出为['hp', 'dell', 'thinkpad', 'lenovo', '神州']

remove函数没有返回值,如果直接打印brands.remove("mac"),会输出None

 

案例1

循环遍历并删除列表中的某个元素

brands = ['hp','dell','thinkpad','lenovo','mac','神州']
for
i in range(len(brands)): #默认从0开始,列表长度结束 if 'mac' in brands[i] or 'hp' in brands[i]: del brands[i] #删除后下标变小,循环越界,会报错 print(brands) #这时需要使用while循环 i=len(brands) while i>=0: i=i-1 if 'hp' in brands[i] or 'dell' in brands[i]: del brands[i] print(brands)

 

案例2

删除列表中想要删除的单词

words = ['hello','good','apple','words','digit','alpha']
print(words)
str1=input('输入你想要删除的单词:')
l=len(words)
while l>=0:
    l-=1
    if str1 in words[l]:
        print('已删除!')
        del words[l]
print(words)

 

案例3

删除列表中某个元素的升级版

python是一门简洁、阅读性极佳的语言,在生产环境中,循环嵌套最好不超过2层,实现代码越少越好。

列表对象count()函数用来判断指定元素出现的次数,返回结果为0时表示不存在该元素

brands = ['hp','dell','thinkpad','lenovo','mac','神州']
value = 'mac'
if brands.count(value)>0: #判断要删除的元素是否存在
    brands.remove(value)
print(brands) #输出为['hp', 'dell', 'thinkpad', 'lenovo', '神州']

 

 列表的添加

三个函数都能对列表进行添加。

append():列表末位追加

extend():将两个列表合并

insert(i,item):将一个元素插入到列表中的某个位置

#append() 列表末尾追加
girls = ['杨幂']
girls.append('杨超越')
print(girls) #['杨幂', '杨超越']

#案列
girls = []
while True:
    name = input('请输入你喜欢的美女的名字:')
    if name == 'q':
        break
    girls.append(name)
print(girls)

#extend() 列表的合并
name = ['a','b','c']
name2=['d','e']
name.extend(name2)
print(name) #输出为['a', 'b', 'c', 'd', 'e']
#等同于+,但extend()比+执行效率更快
print(name+name2) #输出为['a', 'b', 'c', 'd', 'e']

#insert() 插入
girls=['杨幂','黑嘉嘉','孙俪','巩俐','王丽坤']
girls.insert(1,'刘涛')
print(girls) #输出为['杨幂', '刘涛', '黑嘉嘉', '孙俪', '巩俐', '王丽坤']

 

案例

#产生10个随机数放入列表中
import random
list1=[]
for i in range(10): #循环10次,产生10个随机数
    ran = random.randint(1,20) #随机数取值范围为1-20
    list1.append(ran)

#升级,将10个不同的随机数放入列表中
list3=[]
while  len(list3)<10:
    ran = random.randint(1,20)
    if ran not in list3:
        list3.append(ran)
print(list3)

#方法2
list2=[]
i=0
while i<10:
    ran = random.randint(1,20)
    if ran not in list2:
        list2.append(ran)
        i+=1
print(list2)

 

列表的排序

两种方式

列表对象的方法sort()

内置的函数sorted()

sort()跟sorted()的区别

sort()方法会改变原列表的排列顺序,sorted()函数会建立一个排序后的原列表的副本,不会改变原列表的排序。

 

sort()方法语法

listname.sort(key=None,reverse=False)
#key:指定一个方法,用于每个元素执行此方法后再进行排序。
#(例如,key=str.lower 表示列表中每个元素都转换成小写再进行排序)
#reverse:可选参数,如果为True,表示降序排列,为False表示升序

 

案例

sort()方法对字符串进行排序时,先对大写字母进行排序,然后对小写字母进行排序。

指定key参数,让其都转换为小写字母再排序(也可以理解为忽略大小写进行排序)

char=['cat','Tom','Angela','pet']
char.sort()
print('先排大写,再排小写:',char) #输出为先排大写,再排小写: ['Angela', 'Tom', 'cat', 'pet']
char.sort(key=str.lower) #不缺分大小写排序
print('不区分大小写:',char) #输出为不区分大小写: ['Angela', 'cat', 'pet', 'Tom']

 

 

sorted()函数语法

sorted(iterable,key=None,reverse=False)
#iterable:可迭代对象,如列表,字符串,元组等
#key:同sort()方法的key
#reverse:同sort()方法的reverse

 

案例

list1=[10, 2, 14, 19, 16, 11, 13, 3, 9, 7]
new_list = sorted(list1)#默认为False,升序排列
print(new_list) #输出为[2, 3, 7, 9, 10, 11, 13, 14, 16, 19]
new_list = sorted(list1,reverse=True) #降序排列
print(new_list) #输出为[19, 16, 14, 13, 11, 10, 9, 7, 3, 2]

 

 列表的嵌套

列表可以嵌套使用,列表中的元素可以是任意对象,如列表本身。

str1=[1,2,[3,4,[5,6],7],8]
print(str1[2]) #输出为[3,4,[5,6]
print(str1[2][0]) #输出为3
print(str1[2][2][1]) #输出为6

 

列表的转换

使用list()函数可以直接将range()函数循环出来的结果转换为列表。

print(range(1,10,3)) #输出为range(1, 10, 3)
#list()强制转换成列表格式
print(list(range(1,10))) #输出为1,2,3,4,5,6,7,8,9(包前不包后)
print(list(range(1,10,3))) #输出为[1, 4, 7]
print(list(range(10,1,-3))) #输出为[10, 7, 4]

 

列表推导式

可以快速生成一个指定的列表 

1、生成指定范围的数值列表

语法格式

list=[Expression for var in range]
#list:生成列表的名称
#Expression:表达式
#var:循环变量
#range:使用range()函数

案例

项目中经常使用,需要记住!

#生成10个随机数,范围10-100
import random
randomNum = [random.randint(10,100) for i in range(10)]
print('生成的随机数为:',randomNum)
#输出为 生成的随机数为: [49, 38, 34, 48, 40, 44, 32, 78, 69, 70]

 

 

2、根据列表生成指定需求的列表

语法格式

newlist = [Expression for var in list]

案例

定义一个商品价格列表,生成一个所有商品价格打五折后的新列表

price = [1255,1568,4848,3544,2135]
sale = [int(i*0.5) for i in price]
print('打折后的价格:',sale)
#输出 为打折后的价格: [627, 784, 2424, 1772, 1067]

 

 

3、从列表中选择符合条件的元素生成新的列表

语法格式

newlist = [Expression for var in list if condition]

案例

生成一个商品价格高于2000的列表

price = [1255,1568,4848,3544,2135]
sale = [i for i in price if i > 2000]
print('价格高于2000的商品:',sale)
#输出为 价格高于2000的商品: [4848, 3544, 2135]

 

列表中支持的符号

#+
str1=[1,2,3]
str2=[4,5,6]
print(str1+str2) #输出为[1, 2, 3, 4, 5, 6]

#*
str1=['hi','world']
print(str1*2) #输出为['hi', 'world', 'hi', 'world']

#in
result = 3 in [1,2,3] #输出为True

 

学习来自:B站大学 P51-60

《python从入门到项目实践》明日科技 第六章

菜鸟教程

posted @ 2020-11-05 18:23  努力吧阿团  阅读(75)  评论(0编辑  收藏  举报