Python基础教程(6)数据类型之列表list

TangLu 未命名 2019-12-12 565 0

一、Python列表介绍

· Python中的列表可以说是使用最频繁的数据类型,在其他语言中列表通常也叫做数组。如果说变量用来存储一个数据,那列表就是专门用来存储多个数据的。

· Python列表可以包含任何类型的数据,列表中的数据是有序、可变、可重复的,并且支持列表嵌套。

· Python中使用方括号'[ ]'来表示列表,用逗号分隔其中的元素,列表中的每个元素都有一个索引下标,切片方式和字符串一样分为正序和倒序,正序从0开始,访问列表中的任何元素可将其位置减1得到的结果作为索引下标。比如要访问第4个列表元素,索引则为4-1=3。倒序从-1开始,将索引指定为-1可以获取到列表中最后一个元素,索引-2返回倒数第二个列表元素,通常用于不知道列表长度的情况下访问最后的元素使用。


二、Python列表的增删改查

1、创建列表

#创建列表
name = ["tanglu","tom","jerry"]
print (name[0])  #输出结果是tanglu
print (name[-1])  #-1代表最后一个元素,输出jerry

#使用list()函数创建或者把其他数据类型转换为列表
my_list = list(['zhangsan','lisi','wangwu'])
a = 123
print(list(a))  #数字类型如果是非容器类型不能转换为列表
b = 'tanglu'
print(list(b))  #字符串\元组类型转换为列表时会把每一个字符\元素作为列表中的元素;字典转换为列表时会把每个key作为列表的元素


2、查看列表

#查看列表
list01 = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
# 下标    0   1   2   3   4   5   6   7   8    9
# 反序   -10  -9  -8  -7  -6  -5  -4  -3  -2   -1

print(list01[0])    #访问第一个元素
print(list01[-1])   #访问最后一个元素,只有当列表为空时这种访问方式才会报错
print(list01[3:])     #从第4个元素开始访问到最后一个元素
print(list01[:3])   #如果没有指定第一个索引,将从列表第一个元素到下标为3-1的元素
print(list01[3:8])  #从第3个元素开始到下标为8-1的元素结束
print(list01[-3:])  #负数索引返回的是离末尾指定距离的元素,这里返回的则是最后3个元素
print(list01[:-3])  #从0号下标开始到-3截至,但是不包含-3
print(list01[-3:-1]) #从-3元素开始取,截至到最后一个元素但是不包含最后一个元素
print(list01[-3:-8:-1]) #从-3开始到-8-(-1)=-8+1=-7

#空列表的话布尔值为false
names = []       

list3 =list1 + list2  #列表可以直接组合形成新的列表


3、删除列表中的元素

#使用del可删除任意位置处的列表元素,条件是知道其索引
names = ['zhangsan','lisi','wangwu']
del names[1]   #删掉lisi
del names      #也可以直接删整个列表


4、修改列表中的元素

#修改列表中的元素,也可以按元素切片修改
names = ['zhangsan','lisi','wangwu']
names[0] = 'tanglu'
print(names)  #输出tanglu,lisi,wangwu


5、列表的嵌套与复制

#复制列表
my_foods = ['pizza', 'falafel', 'carrot cake']
friend_foods = my_foods[:]    #复制列表必须带有索引下标

my_foods.append('cannoli')
friend_foods.append('ice cream')

print(my_foods)               #输出['pizza', 'falafel', 'carrot cake', 'cannoli']
print(friend_foods)           #输出['pizza', 'falafel', 'carrot cake', 'ice cream']

#列表嵌套
names = ['张学友','刘德华','周杰伦',['hebe','selina','ella'],23]
print (names[1][1])  #输出结果是德字

#列表嵌套与元素获取,如果使用下标并带有冒号,那么获取的数据依然是列表的形式,否则为字符串
test_list = ["周润发", "周星驰", "周笔畅", "周公瑾", ["九品芝麻官", ["吴孟达", "alex", "林雪"],"算死草", "赌侠", "赌圣", "整蛊专家"]]
print (test_list[4][1][0])  #结果是吴孟达


6、遍历列表

#使用循环来遍历列表中的每个元素
for name in names:
  print (i)

#如果要遍历列表的部分元素,可在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())


7、列表表达式

列表表达式也叫做列表解析式,它将for循环和创建元素的代码合并成一行,并可以循环添加元素。使用这种语法时先指定一个描述性的列表名,如squares。然后定义表达式用于生成要存储到列表中的值。如下示例中,表达式为value**2,用于计算平方值。然后通过for循环给表达式提供值

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


#列表表达式,下面2组语句效果是一样的,但是表达式可以减少很多代码
list1 = []
for i in range(1,7):
  list1.append(i*i)
print(list1)  #打印[1,4,9,16,25,36]

list1 = [i*i for i in range(1,6)]

#在表达式中添加if语句
list1 = []
for i in range(1,7):
  if not i % 2:
    list1.append(i*i)
print(list)       #输出4,16,36
  
list1 = [i*i for i in range(1,6) if not i%2]


三、Python列表常用方法
1、append( )方法:为列表增加新的元素到末尾,如果增加的元素也是列表的话会产生列表嵌套列表的效果。该函数没有返回值,如果出现AttributeError: ‘NoneType‘ object has no attribute append这样的错误一般是语句出现了问题:

name = ['tanglu','linux','centos']
name.append('ubuntu')
print (name)  #结果为['tanglu', 'linux', 'centos', 'ubuntu']

#录入学生信息最终汇总到班级信息里,这里用到了列表嵌套和append相关知识点
class_info = []
flag = True
while flag:
    student_name = input("请输入学生姓名:")
    student_age = input("请输入学生年龄:")
    student_sex = input("请输入学生性别:")
    student_info = [student_name,student_age,student_sex]
    class_info.append(student_info)
    answer = input("是否继续录入信息,按n或N退出:")
    if answer.lower() == 'n':
        flag = False
print("班级成员信息如下:")
for i in class_info:
    print(f"学生姓名:{i[0]},年龄:{i[1]},性别:{i[2]}")

#判断录入的图书书名是否重复,最多只能录入3本    
books = []
while len(books) < 3:
    book_name = input("请输入需要添加的书名到书库:")
    for i in books :
        if i['书名'] == book_name:
            print("已添加过该图书,请重新添加")
            break
    book_price = input("请输入图书价格:")
    book_autor = input("请输入图书作者:")
    book = {"书名":book_name,"价格":book_price,"作者":book_autor}
    books.append(book)
print(books)


#下面的语句会出现AttributeError: ‘NoneType‘ object has no attribute append这样的错误
a = []
b = 1
a = a.append(b)

#正确语法
a = []
b = 1
a.append(b)


示例:创建一个空列表,然后追加内容到列表中

name = []
name.append('tanglu')
name.append('tom')
name.append('jerry')
print (name)  #结果为['tanglu', 'tom', 'jerry']


2、insert( )方法:在列表任意位置插入元素

name = ['tanglu','tom','jerry']
name.insert(0,'zhangsan')  #将zhangsan插入到0号索引的位置,其它元素则向右移
print (name)


3、extend( )方法:同样也是为列表添加新的元素,和append的区别在于extend会把数据分解成最小的元素,比如想要增加多个元素到一个列表中的话可以把需要增加的数据加到一个新列表中,然后用extend()追加进去

name = ['tanglu','tom','jerry']
name.extend('周杰伦')
name.extend(['张学友','刘德华'])
print (name)    #输出['tanglu', 'tom', 'jerry', '周', '杰', '伦', '张学友', '刘德华'],将'周杰伦'分解成了最小元素


4、pop( )方法:弹出列表指定的索引元素,如果没有指定则默认弹出最后1个元素,被弹出的元素可以另作它用,但是被pop()弹出的元素就不会存在于原列表了

motorcycles = ['honda', 'yamaha', 'suzuki']

popped_motorcycle = motorcycles.pop()
print(motorcycles)        #输出['honda', 'yamaha']
print(popped_motorcycle)  #输出suzuki


5、remove( ) 方法:根据元素的值来进行删除,如果有多个相同元素,只会删除第一个。该方法适合在不知道列表中值所处的位置时使用,该方法和pop()一样可以再次使用被删除的值,只需要把被删除的值放入新的变量中即可。该方法一次只能删除一个值,如果要删除多个元素需要结合循环遍历删除,但是要注意的是如果使用for循环的话,如果有两个需要被删除的元素是相邻的只会删除一个,另外一个该被删除的元素因为索引下标位移会被跳过

mobile = ['iphone','xiaomi','meizu']
mobile.remove('xiaomi')
print (mobile)  #xiaomi被删除了


#只会删除第一个唐路
list1 = ['唐路','唐路','张三','李四']  #索引下标位0,1,2,3
if '唐路' in list1:
    list1.remove('唐路')         #遍历第一次删掉0后继续遍历是从1开始,而原本的1变成0了
print(list1)                     #输出结果 ['唐路', '张三', '李四']

#使用while循环解决相邻元素问题
n = 0
list1 = ['唐路','唐路','张三','李四']
while n < len(list1):
    if list1[n] == '唐路':
        list1.remove('唐路')
    else:
        n += 1
print(list1)



6、clear( )方法:清空列表


7、len( )方法:统计列表中元素的个数,该方法是从1开始计算,所以通常不会像获取索引下标一样计算错误。常结合循环语句使用,比如在不清楚一个列表有多少元素时,用len()进行获取再做循环

for i in range(len(user_info)):
  user_info[i]


8、count( )方法:统计某个元素出现的次数

numbers = [1,2,3,4,5,6,6,6,7,8]
print (numbers.count(6))  #结果为3


9、sort( )方法:将列表中的元素按照ASCII码进行排序,被排序的数据需要是同类型的,不能将数字和字符串进行混合排序。默认为正序排序,可以通过reverse=True参数实现倒序。使用sort()排序后会修改列表本身数据,还有一个sorted( )方法可以实现临时排序,不会修改原列表数据

num = [1,2,5,3,6,4]
num.sort(reverse=True)
print (num)  #输出 6,5,4,3,2,1


10、reverse()方法:反转列表中的元素但并不会排序

cars = ['bmw', 'audi', 'toyota', 'subaru']
print(cars)    #['bmw', 'audi', 'toyota', 'subaru']

cars.reverse()
print(cars)    #['subaru', 'toyota', 'audi', 'bmw']


11、copy()方法:复制列表,复制后的数据是独立的,不会因为原数据的变化而随之变化

list1=['tanglu','zhangsan','lisi','wangwu']
list2=list1.copy()
del list1[0]
print(list2)  #输出依然是['tanglu','zhangsan','lisi','wangwu']

list1=['tanglu','zhangsan','lisi','wangwu']
list2=list1
del list1[0]
print(list2)  #输出['zhangsan', 'lisi', 'wangwu']


12、min\max\sum:对列表进行取最小值、最大值、求和

list1 = [1,2,3,4,5,6,7]
print("list1的最小值:",min(list1))
print("list1的最大值:",max(list1))

评论