一、列表 - list
底层使用的一个双向链表结构
定义列表:
ls = []
ls = [12,3,3,3]
list全局函数
list(可迭代对象)
列表中的常见方法:
['append', 'clear', 'copy', 'count', 'extend',
'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
|-- append(新元素) # 在尾部追加新的元素
|-- insert(index, 新元素) # 在固定位置插入新的元素
|-- extend(列表) # 合并列表
|-- pop([index=-1]) # append对应,会默认移除最后一个元素
|-- remove(元素) # 移除对应的元素
|-- clear() # 清空
|-- index(元素) # 取对应元素
|-- count(元素) # 统计元素的个数
|-- copy() #浅拷贝
|-- reverse() # 反转
|-- sort() # 排序
二、set - 集合
hash table:无序、无重复元素
定义set:
s = {1,1,2,3,}
s = {} # 注意,这样定义的是错误的集合,这是一个dict
set(可迭代对象)
注意:
set是无序的!!所以没有下标
set无法使用while循环遍历,因为没有下标,所以只能使用for循环迭代遍历
et常见方法:
['add', 'clear', 'copy', 'difference', 'difference_update',
'discard', 'intersection', 'intersection_update',
'isdisjoint', 'issubset', 'issuperset', 'pop', 'remove',
'symmetric_difference', 'symmetric_difference_update',
'union', 'update']
同上
|-- add(新元素)
|-- clear()
|-- copy()
|-- discard()
|-- remove()
|-- update()
|-- union()
|-- difference()
|-- intersection()
|-- pop()
三、tuple - 元组
一组不变的数据、不可变数据类型
() tuple(可迭代对象)
因为不可变,所以在创建之初,一定要将值确定下来
元组是有序的,所以可以使用下标来访问元素,但是注意:不能修改元素
常见方法:
|-- index()
|-- count()
面试题:
s = (1) # s的类型是什么?
s = (1) type (s)--> int
s = (1,) type (s)--> tuple
四、dict - 字典
底层也是hash table
常见方法:
['clear', 'copy', 'fromkeys', 'get', 'items', 'keys',
'pop', 'popitem', 'setdefault', 'update', 'values']
|-- clear()
|-- copy()
|-- get() # 取对应的键值对
|-- pop()
|-- popitem()
|-- values() # 取对应的值
|-- keys() # 取对应的键
|-- items()
五、练习题
1、判断以下哪些不能作为标识符(F)
A、a
B、¥a
C、_12
D、$a@12
E、false
F、False
2、 输入数,判断这个数是否是质数(要求使用函数 + for循环)
def is_zhishu(num):
for i in range(2,num // 2 + 1):
if num % i == 0:
return False
return True
if is_zhishu(7):
print("这个数是质数")
else:
print("这个数不是质数")
结果:
3:求50~150之间的质数是那些?
for i in range(50, 151):
flag = True
for j in range(2, i // 2 + 1):
if i % j == 0:
flag = False
break
if flag:
print(f"{i}是质数")
结果:
4:打印输出标准水仙花数,输出这些水仙花数
for i in range(100,1000):
g = i % 10
s = i % 100 // 10
b = i // 100
if b ** 3 + s ** 3 + g ** 3 == b * 100 + s * 10 + g:
print(i)
结果:
5:验证:任意一个大于9的整数减去它的各位数字之和所得的差,一定能被9整除.
def num9(num):
count = 0
back_num = num
while num != 0:
temp = num % 10
num //= 10
count += temp
if (back_num - count) % 9 == 0:
return True
else:
return False
x = int(input("请输入一个大于9的整数:"))
print(num9(x))
6:一个五位数,若在它的后面写上一个7,得到一个六位数A,若在它前面写上一个7,得到一个六位数B,B是A的五倍,求此五位数.
def num():
for i in range(10000, 100000):
behind_num = i * 10 + 7
front_num = 700000 + i
if front_num // behind_num == 5 and front_num % behind_num == 0:
print(i)
num()
结果:
7:有一堆硬币,每次只能拿一个或者两个,求最少多少次可以拿完硬币
[10, 8, 5, 3, 27, 99]
ls = [10, 8, 5, 3, 27, 99]
def num():
a = 0
if i % 2 == 0:
a = i // 2
else:
a = (i + 1) // 2
print(a)
for i in ls:
num()
结果:
8:如果两个素数之差为2,这样的两个素数就叫作"孪生数",找出100以内的所有"孪生数".
def prime_number():
for i in range(101):
flag = True
for j in range(2, i // 2 + 1):
if i % j == 0:
flag = False
break
if flag:
prime_numbers.append(i)
i = 1
while i < len(prime_numbers):
if prime_numbers[i] - prime_numbers[i - 1] == 2:
print(f"{prime_numbers[i]}和{prime_numbers[i - 1]}为孪生素数")
i += 1
prime_number()
结果:
9:给定一个列表,求最大值(不能使用系统api),求最小值,求平均值、求和
def ls():
l_list = [1, 4, 5, 2, 3]
i = 0
max_num = 0
min_num = 0
avg = 0
sum = 0
while i < len(l_list):
sum += l_list[i]
if l_list[i] > max_num:
max_num = l_list[i]
elif l_list[i] < min_num:
min_num = l_list[i]
i += 1
avg = sum // len(l_list)
print(f"max:{max_num},min:{min_num},sum:{sum},avg:{avg}")
ls()
结果:
10:将list中的重复数据去重,至少使用两种方案
ls = [0,0,1,1,1,2,2,2,3,4,5,5,6,6]
ls_re = list(set(ls))
print(ls)
print(ls_re)
结果:
11:两个列表进行合并操作
ls1 = [1,2,3]
ls2 = [7,8,9]
ls1.extend(ls2)
print(ls1)
结果:
12: 使用列表判断一个列表是否在另外一个列表中
ls1 = [1,2,3,4,5,6,7,8,9]
ls2 = [1,2,3,4]
ls3 = [0,1,2,3]
print(set(ls2).issubset(set(ls1)))
print(set(ls3).issubset(set(ls1)))
结果:
13:列表的反转 列表的排序
ls = [1,5,2,6,8,4]
ls.reverse()
print(f"反转:{ls}")
ls.sort()
print(f"排序:{ls}")
结果:
14:如何将0-10随机存入列表中
import random
ls = []
for i in range(10):
ls.append(random.randint(0,10))
print(ls)
结果: