python 数组总结及遇到的例题

一、什么是列表

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

三、数组与排序问题。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值