学习Python的Day5,开始有难度啦!

Day5

1. 回顾Day4

a.列表的性质(可变、有序)
b.增、删、改
c.下标 --> 切片

2. 列表的运算

2.1 列表的重复

list1 = [1, 2, 3, 4]
print(list1 * 3)  # 原列表重复3次在一个列表中

# 运行结果
# [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]

2.1 列表的拼接

list1 = [1, 2, 3, 4]
list2 = [4, 5, 6, 7]
print(list1 + list2)

# 运行结果
# [1, 2, 3, 4, 4, 5, 6, 7]

2.3 成员运算:in、not in

成员运算的结果是布尔值

print(3 in [1, 2, 3])  # True
print([3] in [1, 2, 3])  # False
print([3] in [1, 2, 3, [3]])  # True

2.4 比较大小

a.比较大小的元素必须是同类型的
b.比较大小比较的是第一对不相等的元素的大小(容器)
c.数字正常比较大小

list1 = [1, 2, 3, 4]
list2 = [1, 2, 4, 5]
print(list1 < list2)

list1 = [1, 2, '3', 4]  # ASCII编码
list2 = [1, 2, '4', 5]
print(list1 < list2)

list1 = ['1', 2, '3', 4]  # TypeError: '<' not supported between instances of 'str' and 'int'
list2 = [1, 2, '4', 5]
print(list1 < list2)
# 运行结果
'''
True
True
(报错)TypeError: '<' not supported between instances of 'str' and 'int'
'''

3. 列表的方法和函数

3.1 max、min - 获取同类型数据中最大或者最小值

num = [1, 2, 3, 4]
print(max(num))
print(min(num))

# 运行结果
'''
4
1
'''

3.2 count - 统计某个元素出现个数

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

# 运行结果
'''
1
0
'''

3.3 sum - 求元素的和

num = [1, 2, 3, 4]
print(sum(num))

# 运行结果
'''
10
'''

3.4 reverse - 将列表倒序,返回值为None,直接修改列表本身,还需打印

num = [1, 2, 3, 4]
print(num.reverse())
print(num)
print(num[::-1])

# 运行结果
'''
None
[4, 3, 2, 1]
[1, 2, 3, 4]
'''

3.5 sorted - 将列表从小到大排序,生成新的列表

sorted(列表, reverse=False) - 从小到大排序,reverse=True - 从大到小排序
sort - 将列表从小到大排序,修改原列表
列表.sort(reverse=False)
列表.sort(reverse=True)

num1 = [23, 78, 0, 90]
print(sorted(num1))
print(sorted(num1, reverse=True))
print(num1)  # 原列表还在

# 运行结果
'''
None
[0, 23, 78, 90]
[90, 78, 23, 0]
[23, 78, 0, 90]
'''

3.6 extend() - 将一个容器中的元素添加到列表中

num1 = [23, 78, 0, 90]
num1.extend('abcdea')
print(num1)

# 运行结果
'''
[23, 78, 0, 90, 'a', 'b', 'c', 'd', 'e', 'a']
'''

3.7 index - 查找元素

a. 从左向右查找,找到元素立刻停止,返回下标
b. 如果查找元素不存在,报错

num1 = [23, 78, 0, 90, 'a', 'b', 'c', 'd', 'e', 'a']
index1 = num1.index('a')
# 指定从下标为5的位置开始查找
index1 = num1.index('a', 5)
print(index1)

# 运行结果
'''
9
'''

3.8 练习

不使用index(),查找第二个a的下标

list1 = [1, 2, 3, 4, 'a', 'a']
a_count = 0
for i in range(len(list1)):
    if list1[i] == 'a':
        a_count += 1
        if a_count == 2:
            print(i)
            break

# 运行结果
'''
5
'''

4. 列表去重

有一个列表,要求去掉重复的人名
例如:names = [‘张三’, ‘李四’, ‘大黄’, ‘张三’,‘张三’] -> names = [‘张三’, ‘李四’, ‘大黄’]

4.1 方法一:

names = ['张三', '李四', '大黄', '张三', '张三', '李四', '李四']
name_list = []
for i in names:
    if i not in name_list:
        name_list.append(i)
print(name_list)

# 运行结果
'''
['张三', '李四', '大黄']
'''

4.2 方法二:

print('方法二:')
names = ['张三', '李四', '大黄', '张三', '张三', '李四', '李四']
for i in range(len(names)-1, -1, -1):
    print(i, names)
    if names.count(names[i]) > 1:
        del names[i]
print(names)

# 运行结果
'''
6 ['张三', '李四', '大黄', '张三', '张三', '李四', '李四']
5 ['张三', '李四', '大黄', '张三', '张三', '李四']
4 ['张三', '李四', '大黄', '张三', '张三']
3 ['张三', '李四', '大黄', '张三']
2 ['张三', '李四', '大黄']
1 ['张三', '李四', '大黄']
0 ['张三', '李四', '大黄']
['张三', '李四', '大黄']
'''

4.1方法三:

names = ['张三', '李四', '大黄', '张三', '张三', '李四', '李四']
index = 0
while index <= len(names) - 1:
    if names.count(names[index]) > 1:
        del names[index]
    else:
        index += 1
print(names)

# 运行结果
'''
['大黄', '张三', '李四']
'''

5. 列表推导式

列表推导式(列表生成式)
作用:生成一个有元素的列表。

5.1 语法一:[表达式 for 变量 in 容器]

for循环每执行一次,表达式就会将其生成的结果添加到列表中。

num = [i for i in range(1, 21)]
print(num)
num_2 = [1 for _ in range(10)]
print(num_2)

# 运行结果
'''
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
'''

append()方法适用于所有向列表中追加元素的操作;
列表推导式在某些情况下可以替代append()
性能:列表推导式 优于 append方法

对比性能:将1到10添加到列表中

import time
start = time.time()
list1 = []
for i in range(1, 10000001):
    list1.append(i)
end = time.time()
print(f'append方法一共花费{end-start}秒')

start = time.time()
list2 = [i for i in range(1, 10000001)]
end = time.time()
print(f'列表推导式一共花费{end-start}秒')

# 运行结果
'''
append方法一共花费1.1515977382659912秒
列表推导式一共花费0.5870416164398193秒
'''

5.2 语法二:[for 变量 in 容器 if 条件]

for 循环执行一次,if分支判断一次,条件成立时表达式执行。

将100以内所有的偶数添加到列表中:

list3 = [i for i in range(1, 101) if i % 2 == 0]
print(list3)

# 运行结果
'''
[2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100]
'''

5.3 语法三:[表达式 for 变量 in 容器 for 变量 in 容器]

list4 = [i for _ in range(3) for i in range(1, 11)]
print(list4)

# 运行结果
'''
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
'''

5.4 练习:

孪生数:两个素数的差等于2,找出100以内所有的孪生数。

new_list = []
for i in range(2, 101):
    if i == 2:
        print(f'2是素数')
    else:
        # 判断[2, x-1]中有没有能将x整除的元素
        for j in range(2, i):
            if i % j == 0:
                print(f'{i}不是素数')
                break
        else:
                print(f'{i}是素数')
                new_list.append(i)
print(new_list)
for x in range(len(new_list) - 1):
    if new_list[x + 1] - new_list[x] == 2:
        print(f'{new_list[x + 1]}{new_list[x]}是孪生数')

# 运行结果
'''
2是素数
3是素数
4不是素数
(略)
98不是素数
99不是素数
100不是素数
[3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
5和3是孪生数
7和5是孪生数
13和11是孪生数
19和17是孪生数
31和29是孪生数
43和41是孪生数
61和59是孪生数
73和71是孪生数
'''

6. 随机模块

random:随机模块

6.1 randint(a, b) – 从[a, b]闭区间中随机获取一个整数

import random

print(random.randint(1, 4))

# 运行结果
'''
3
'''

6.2 randrange() – 约等价于randint + range

import random

print(random.randrange(1, 3))

# 运行结果
'''
2
'''

6.3 choice() – 从容器中随机获取一个元素

import random

print(random.choice([1, 2, 3, 4]))

# 运行结果
'''
3
'''

6.4 choices() – 从容器中随机获取K个元素,有放回的抽取元素。

import random

print(random.choices([1, 2, 3, 4], k=5))

# 运行结果
'''
[2, 1, 3, 3, 2]
'''

6.5 sample() – 从有序序列中无放回的抽取K个元素

import random

print(random.sample([1, 2, 3, 4], k=3))

# 运行结果
'''
[3, 1, 2]
'''

6.6 shffule() – 将有序容器随机打乱顺序,无返回值,修改序列本身。

import random

list1 = [1, 2, 3, 4]
random.shuffle(list1)
print(list1)

# 运行结果
'''
[3, 2, 4, 1]
'''

6.7 练习:课堂点名器

import random

names = ['amy', 'ziv', 'lucy', 'jasmine']
random.shuffle(names)
result = random.choices(names, k=1)
print(f'被抽中的同学为:{result}')
# 如果想一直让一位同学中奖
# 设置内幕
while True:
    result = random.sample(names, k=1)
    if result == ['amy']:
        break
print(f'被抽中的同学为:{result}')

# 运行结果
'''
被抽中的同学为:['ziv']
被抽中的同学为:['amy']
'''

6.8

使用PyQt/wxpython等GUI(图形可视化)进行可视化
使用pyinstall将程序封装成windows的exe可执行文件

Day5 over!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值