一、什么是列表
list 列表:
- 底层就是一个双向链表结构!!!(所以其为有序的,可以用下标)
- dir代表显示目录的文件和子目录的列表。
list的定义:
- nums = [1, 2, 2, 3, 5, 4, 56]
- list()全局函数,可以将可迭代对象(容器、Iterable)转换为列表
元素 element:容器中每一个值。
- 列表中,有序的线性表,每一个元素的顺序是固定,可以通过下标(角标)查找到每一个元素
- 注意:角标都是从0开始!!
len(列表对象) 返回列表的长度,即元素的个数 len(ls)
二、列表的遍历方法
一、使用while循环进行遍历
i = 0
ls = [3,2,3,4,5]
while i < len(ls):
print(ls[i])
i += 1
输出结果:
3
2
3
4
5
二、使用for循环进行遍历:
ls = [3,2,3,4,5]
for i in ls:
print(i)
输出结果:
3
2
3
4
5
三、列表的各种方法:
['append', 'clear', 'copy', 'count', 'extend',
'index', 'insert', 'pop', 'remove', 'reverse', 'sort'] 使用dir(list)查询即可
# 增
|-- append(新的元素) # 在尾部追加新的元素
|-- insert(index(注释:代表插入元素的位置), 新的元素) # 在对应的位置插入新的元素
|-- extend(其他列表) # 合并列表,原列表会改变
# 删
|-- pop(index=-1) # 从尾部移除元素,如果index等于其他值,表示删除对应的位置元素
|-- remove(元素) # 通过元素删除元素
|-- clear() # 慎用,清空列表
# 查
|-- count(元素) # 统计当前列表所输入的元素有几个
|-- index(元素) # 返回元素所在的位置
# 排序
|-- reverse() # 倒序,反转列表
|-- sort # 排序
|--sort(reverse = True) # 倒序排法,若reverse = False时,则进行正序排序
|--reversed() # 为全局函数,此函数运用完后,原列表不变化
# 复制
|-- copy() # 拷贝,浅拷贝,c语言中指针引用传递
将当前的列表复制一份相同的列表,新列表与旧列表内容相同,但内存空间不同
四、列表的例题:
一、使用列表的方法解决简单问题:
1、如何将0-10随机存入列表中(考查如何将数存到列表中去,使用append方法进行)
代码:
import random
ls = [1,2,4,5,23]
count = random.randint(0,10)
ls.append(count)
print(ls)
输出结果:
PS C:\Users\牛牛牛> & D:/oupeng/python3112/python.exe "c:/Users/牛牛牛/Desktop/4.15有问题代码/4.15
问题代码.py"
[1, 2, 4, 5, 23, 8]
2、列表的反转,列表的排序 (考察列表中reverse和sort的方法)
代码段:
#列表的反转:
ls = [1,2,4,5,23]
ls.reverse()
print(ls)
#列表的排序:
ls = [1,2,4,5,23]
ls.sort()
print(ls)
#列表的倒排序:
ls = [1,2,4,5,23]
ls.sort(reverse=True)
print(ls)
输出结果:
PS C:\Users\牛牛牛> & D:/oupeng/python3112/python.exe "c:/Users/牛牛牛/Desktop/4.15有问题代码/4.15
问题代码.py"
[23, 5, 4, 2, 1]
[1, 2, 4, 5, 23]
[23, 5, 4, 2, 1]
3、python 判断一个list列表是否包含另一个list列表(使用集合或字典进行判断,原因是集合和字典是基于hash表实现的,故是无序的)
#第一种方法
ls1 = [32,51,23,61,37]
ls2 = [32,51,41]
print(set(ls2) <=set(ls1)) #ls1是否包含ls2,<= 则表示是否是子集
#第二种方法
ls1 = [1,2,3,5,4,5,6,7]
ls2 = [1,4,5,3,7]
print(f'您输入的列表1是:{ls1}')
print(f'您输入的列表2是:{ls2}')
flag = True
for i in ls2:
if i not in ls1:
flag = False
break
if flag == True:
print('列表2在列表1中')
else:
print('列表2不在列表1中')
4、两个列表进行合并操作 (考察extend方法,由于合并后源列表并不会消失)
# ls1 = [32,51,23,61,37]
# ls2 = [32,51,41]
# ls2.extend(ls1)
# print(ls2)
5、将list中的重复数据去重,至少使用两种方案(使用集合和for遍历的方式进行解决问题,此外还有字典的遍历方式,若学会立马上传)
#第一种方法(运用set的方法,由于set中没有重复,为了防止哈希碰撞)
ls = [32,24,12,62,32,15,24]
count=set(ls)
print(list(count))
#第二种方法(由于先建立一个新的空列表,通过遍历原来的列表,再利用逻辑关系not in 来去重。)
ls=[1,2,3,4,5,1,2,3]
new_ls=[]
for i in ls:
if i not in new_ls:
new_ls.append(i)
print(new_ls)
输出结果:
PS C:\Users\牛牛牛> & D:/oupeng/python3112/python.exe "c:/Users/牛牛牛/Desktop/4.15有问题代码/4.15
问题代码.py"
[32, 12, 15, 24, 62]
[1, 2, 3, 4, 5]
二、列表和循环叠加的问题
1、给定一个列表,求最大值(不能使用系统api),求最小值,求平均值、求和
ls = [1,2,3,4,5,6,7,8,9,10]
print("列表",ls)
num_max = ls[0]
num_min = ls[0]
num_and = 0
for i in range(1,len(ls)):
if num_max < ls[i]:
num_max = ls[i]
elif num_min > ls[i]:
num_min = ls[i]
else:
pass
print("最大值:",num_max)
print("最小值:",num_min)
for i in ls:
num_and += i
print("和:",num_and)
num_average = num_and/len(ls)
print("平均值:",num_average)
运行结果:
2、有一堆硬币,每次只能拿一个或者两个,求最少多少次可以拿完硬币
代码:
def coins():
coin=[10, 8, 5, 3, 27, 99]
x=0
for i in coin:
if i%2==0:
x+=i//2
else:
x+=i//2+1
print(f"最少{x}次可以拿完硬币")
coins()
运行结果:
3、如果两个素数之差为2,这样的两个素数就叫作"孪生数",找出100以内的所有"孪生数".
代码:
ls = []
for i in range(2,101):
flag = True
for j in range(2,i//2+1):
if i % j == 0:
flag = False
break
if flag :
ls.append(i)
for i in range(1,len(ls)):
if ls[i] - ls[i-1] == 2 :
print(f"100以内的数,两个素数互为孪生数的是{ls[i]}和{ls[i-1]}")
4、将10进制数据转换为二进制,并且统计其中的0和1的数量
num = int(input("请输入一个数:"))
def number(num):
ls = []
back_num = num
while num != 0:
n = num % 2
num //= 2
ls.append(n)
ls.reverse()
print(f"{back_num}的二进制数为:")
for i in ls:
print(i,end="")
print()
a = ls.count(0)
b = ls.count(1)
print(f"0的个数为:{a},1的个数为:{b}")
number(num)
#运行结果:
PS C:\Users\牛牛牛> & D:/oupeng/python3112/python.exe c:/Users/牛牛牛/Desktop/4.15有问题代码/4.15练习代码.py
请输入一个数:12
12的二进制数为:
1100
0的个数为:2,1的个数为:2
5、写一个方法,计算列表所有偶数下标元素的和(注意返回值) (思路:主要运用数组中for和while的遍历求解)
代码:
#求一个数组中是偶数元素的和
ls=[1,2,3,4,5,6,7,8,9,10,23,14,66]
l=[]
def even_number(lis):
for i in lis:
if i % 2 == 0:
l.append(i)
return sum(l)
print(even_number(ls))
#求一个数组中偶数下标元素的和
def list_number(ls):
sum = 0
i = 0
while i <len(ls):
sum += ls[i]
i +=2
return sum
list = [1,2,3,4,5,6,7,8]
print(f"{list_number(list)}")
#运行结果:
#PS C:\Users\牛牛牛> & D:/oupeng/python3112/python.exe c:/Users/牛牛牛/Desktop/4.15有问题代码/4.15练习代码.py
110
16