python练习之内置容器

一、列表 - 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)

结果:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值