python基础 - 08 容器类型 - 列表

列表(list): [ ]

1.特点

(1) 由一系列特有顺序的元素组成(一个元素:就是容器中的一个内容)

(2) 列表可以存储任意类型的数据

2.定义列表

names = []   # 定义一个空列表
grades = [90, 99, 54, 76, 50, 34, 60, 88]  # 定义列表,并且给他赋初始值
names_grades = ['hanbo', 'wangyan', True, 100, 90]  # 列表中元素的类型可以不一样

注意:在语法上可以存储多种类型的数据,一般在使用过程中都是存储相同的数据类型
  
numbers = [value for value in range(1, 20)]     #创建范围内的列表
print(numbers)
numbers1 = [value + 10 for value in range(1, 20)]  # 快速的创建范围内的数值
print(numbers1)

3.使用列表中的元素

(1) 使用索引(下标)去获取列表中的元素

格式: 列表名[索引] #下标的取值范围 = 0 ~ (列表的长度 - 1)

grades = [90, 99, 54, 76, 50, 34, 60, 88]
print(grades[0])
print(grades[1])
print(grades[7])
print(grades[8])  # 注意:下标值不能超出范围,超出范围结果会报错.
例如:
names_grades = ['hanbo', 'wangyan', True, 100, 90]
print(names_grades[0])
print(names_grades[1])
print(names_grades[2])
print(names_grades[3])
print(names_grades[4])

(2)索引(下标)值可以取负数

格式: 列表名[-索引] #取到的数是第几个元素, 下标是几取的就是倒数第几

grades = [90, 99, 54, 76, 50, 34, 60, 88]
print(grades[-1])
print(grades[-2])
print(grades[-3])
print(grades[-9])   # 注意索引(下标)同样不能越界

(3)通过for循环遍历列表

grades1 = [90, 99, 54, 76, 50, 34, 60, 88]
for i in range(0, len(grades1)):      # 通过for循环取下标值
    print(grades1[i])

for x in grades1:    # 让x去获取列表grades1中的每一个元素
    print(x)

练习1: 将一些朋友的姓名存储在一个列表中,并将其名字为names2.依次访问该列表中的每一个元素,从而将每个朋友的姓名都打印出来.并为每人打印一条问候语

names2 = ['hanbo', 'wangyan', 'xiaoming', 'huanghong']
for name in names2:
    print(name.title() + ': 你好,吃饭了吗:')
print('吃了')

4.元素的修改,增加和删除操作(增删改插)

(1).修改元素

numbers = [1, 2, 3, 4, 5, 6]
numbers[0] = 10   # 通过索引拿到需要修改的元素,然后重新赋值
print(numbers)

练习2:使用列表存储学生的成绩,保证其中有多个55-59分的成绩,然后将其中在55-59之间的成绩改为60分.

grades = [34, 60, 77, 89, 90, 55, 56, 57,100, 58, 59]
for x in range(0, len(grades)):
    if 55 <= grades[x] <= 59:
        grades[x] = 60
print(grades)

(2).增加\添加元素

a. append(元素):在列表的末尾添加一个元素

grades = [34, 60, 77, 89, 90, 55, 56, 57,100, 58, 59]
grades.append(99)
grades.append(99)   #添加相同元素,不会覆盖
print(grades)

b. insert(索引,元素):在指定的索引前插入一个元素

grades = [34, 60, 77, 89, 90, 55, 56, 57,100, 58, 59]
grades.insert(1, 100)
print(grades)
grades.insert(11, 100) #在python2里面索引不能越界,在python3里面索引可以越界,正的索引越界是插入到列表的末尾的,负的索引越界是插入到列表的开头.
print(grades)

总结: 插入的实质是: 插入到对应的索引值的前面

(3).删除

a. del 列表名[索引]: 删除执行的元素(通过索引去拿到的元素)

删除指定索引对应的元素,列表发生改变
colors = ['yellow', 'red', 'blue', 'black', 'orange']
del colors[0]
del colors[5]  #del对应的索引不能越界,否则报错
print(colors)

b. remove(元素值)

colors = ['yellow', 'red', 'blue', 'black', 'orange']
colors.remove('orange')
print(colors)
colors.remove(colors[3])   #通过下标删除元素
print(colors)
c.pop()函数.

pop():是将列表中的元素从列表中取出,取出的是列表中的最后一个元素,并且返回.

colors = ['yellow', 'red', 'blue', 'black', 'orange']
colors.pop()
print(colors)
print(colors.pop())  #取出列表中的最后一个元素

pop(索引):将列表中索引指定的元素取出

colors = ['yellow', 'red', 'blue', 'black', 'orange']
colors.pop(1)
print(colors)

练习3:创建一个列表存储学生的成绩,将列表中成绩低于60分的成绩取出来,放入另外一个空的列表中.

grades = [33, 44, 55, 58, 63, 88, 99, 50]
low_grades = []
num = 0
while num < len(grades):
    grade = grades[num]
    if grade < 60:
        low_grades.append(grades.pop(num))
        num -= 1
    num += 1
print(low_grades)

练习4:用一个列表存储班上同学的名字,其中一个人退学了,将他从列表中删除(用两种方法)

name = names[x]
if name == 'fulei':# 方法一:
names = ['wangming', 'fulei', 'wangdachui', 'xiaoming', 'dahua']
xs = [name for name in range(0, len(names))]
for x in xs:
    name = names[x]
    if name == 'fulei':
        del names[x]
        del xs[-1]
print(names)

# 方法二:
names.remove('fulei')   #remove直接删除元素
print(names)

# 总结:列表存储数据使用的是栈的结构:先进后出,后进先出

5.组织列表

(1) sort():对列表的元素进行升序排列(直接改变原列表的元素,返回值为None)

ages = [3, 9, 5, 4, 6, 8, 7]
ages.sort()
print(ages)

reverse: 将参数reverse设置为True, 就成为降序排列

ages = [3, 9, 5, 4, 6, 8, 7]
ages.sort(reverse = True)
print(ages)

(2) sorted() : 将列表中的元素升序排列,然后返回一个新的列表.(不会改变原列表的元素,返回一个升序排列的新列表)

ages1 = [3, 9, 5, 4, 6, 8, 7]
new_ages1 = sorted(ages1)
print(new_ages1)

同样可以用reverse进行降序排列

print(sorted(ages1, reverse = True))

(3) reverse() : 将列表中的元素进行反向排序(直接改变原来的列表)

ages3 = [3, 9, 5, 4, 6, 8, 7]
ages3.reverse()
print(ages3)

6.数值统计

(1) max(): 返回最大值

numbers = [1, 2, 6]
print(max(numbers))

(2) min(): 返回最小值

numbers = [1, 2, 6]
print(min(numbers))

(3) sum(): 返回列表中元素的和

numbers = [1, 2, 6]
print(sum(numbers))

(4) import heapq模块(实现了一个堆的数据结构)

a. nlargest(n, 列表)找出列表中最大的n个数,以列表形式返回

import heapq
numbers = [1, 2, 6]
print(heapq.nlargest(2, numbers))

b. nsmallest(n, 列表)找出列表中最小的n个数,以列表形式返回

import heapq
numbers = [1, 2, 6]
print(heapq.nsmallest(2, numbers))

(5) count(): 统计列表某个元素的个数

list8 = [1, 2, 3, 4, 5, 6, 5, 5]
count = list8.count(5)
print(count)

(6) index(): 获取指定元素对应的索引(下标),如果列表中有多个相同的元素,返回第一个元素的下标

list8 = [1, 2, 3, 4, 5, 6, 5, 5]
index = list8.index(3)
print(index)

7.获取列表部分元素

(1). 切片

numbers = [8, 7, 6, 5, 4, 3, 2, 1]
print(numbers[0:3])      #获取索引0~3(不包括3)对应的元素
print(numbers[:4])       #获取索引开始~4(不包括4)对应的元素
print(numbers[2:])       #获取索引2~最后的元素
print(numbers[:])        #获取列表所有元素
print(numbers[:-1])      #获取开始到-2索引的元素
print(numbers[-4:-2])    #获取倒数索引4~索引2(不包括-2)对应的元素

a. 如果冒号前面的数大于冒号后面的数,返回的是一个空列表

numbers = [8, 7, 6, 5, 4, 3, 2, 1]
print(numbers[4:2])
print(numbers[-2:-4])

b. 如果冒号后面的数大于列表的长度,后面会取到列表的最后一个值

numbers = [8, 7, 6, 5, 4, 3, 2, 1]
print(numbers[1:100])

(2). 用*号

numbers = ['hanbo', 1, 2, 3, 4, 5, 'man']
name,*scores = numbers
print(name)
print(scores)

name,*scores,sex = numbers
print(name)
print(sex)
print(scores)

8,列表的复制

(1) 通过切片获取索引复制元素(能复制)

list1 = [44, 55, 67, 80, 40, 59, 88, 99]
temp_1 = list1[:]  #总结:获取全部元素只能用切片
print(temp_1)

(2) copy(),赋值出一个新的列表并返回(能复制)

list1 = [44, 55, 67, 80, 40, 59, 88, 99]
temp_2 = list1.copy()
print(temp_2)

(3) 通过*变量名,只能获取部分元素(能获取部分)

list1 = [44, 55, 67, 80, 40, 59, 88, 99]
*temp_2 = list1
print(list1, temp_2)

(4)通过变量重新赋值(不能复制原列表)

list1[0] = 100
list1 = [44, 55, 67, 80, 40, 59, 88, 99]
temp = list1        
list1[0] = 100
print(list1)
print(temp)

9.列表的连接

numbers_1 = [1, 2, 3]
numbers_2 = [4, 5, 6]
print(numbers_1 + numbers_2)   #通过+号可以直接将两个列表合并成一个新的列表

练习5: 已知一个列表,输出所有奇数下标元素

list3 = [1, 2, 3, 4, 5, 6, 7, 8]
new_list3 = []
for q in range(0, len(list3)):
    if q % 2 != 0:
        new_list3.append(list3[q])
print(new_list3)

练习6: 已知一个列表,输出所有元素中,值为奇数的

list4 = [11, 13, 12, 15, 14, 10, 97, 99, 100]
new_list4 = []
for x in range(0, len(list4)):
    if list4[x] % 2 != 0:
        new_list4.append(list4[x])
print(new_list4)

练习7: 已知一个列表,将所有元素乘二

list5 = [1, 5, 3, 4, 5, 6]
new_list5 = []
for w in range(0, len(list5)):
        new_list5.append(list5[w]*2)
print(new_list5)

练习8: 已知一个列表A,将奇数下标元素存到B列表中,偶数元素存到C列表中

list7 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
odd_list7 = []
even_list7 = []
for r in range(0, len(list7)):
    if r % 2 == 0:
        odd_list7.append(list7[r])
    else:
        even_list7.append(list7[r])
print(odd_list7)
print(even_list7)

10. 补充: 二维列表

就是在列表里面放列表

# 例如 1-36
numbers = [
    [1,2,3,4,5,6],
    [7,8,9,10,11,12],
    [13,14,15,16,17,18],
    [19,20,21,22,23,24],
    [25,26,27,28,29,30],
    [31,32,33,34,35,36]
]
print(numbers[0][0])   >>>1
print(numbers[0][1])   >>>2

for list_1 in numbers:   #遍历整个列表
    for x in list_1:
        print(x)
print(numbers)


猜你喜欢

转载自blog.csdn.net/hanbo6/article/details/80315095
今日推荐