python学习---day5

列表的运算

1.列表的重复

list1 = [1, 2, 3, 4]
print(list1 * 3)

[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]

2.列表的拼接

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

[1, 2, 3, 4, 4, 5, 6, 7]

3.成员运算

----->in、 not in
成员运算的结果是布尔值

print(3 in [1, 3, 4])
print([3] in [1, 3, 4])
print([3] in [1, [3], 4])

True
False
True

4.比较大小

  • 同类型的元素比较大小
  • 比较大小比较的是第一对不相等元素的大小(容器)
  • 数字正常比较大小
list1 = [1, 2, 3, 4]
list2 = [1, 2, 4, 5]
print(list1 < list2)

True

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

True

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

error: ‘<’ not supported between instances of ‘str’ and ‘int’

练习
有两个列表A和B,
例如: A = [1, ‘a’, 4, 90] B = [‘a’, 8, ‘j’, 1] --> C = [1, ‘a’]

A = [1, 'a', 4, 90]
B = ['a', 8, 'j', 1]
C = []
for i in A:
    if i in B:
        C.append(i)
print(C)

[1, ‘a’]

列表的方法和函数

1.max、min

— 获取最大值、最小值
:操作对象必须是同类型数据

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

4
1

2.count

— 统计某个元素出现的个数

print(num.count(1))

2

3.sum

— 求和

print(sum(num))

11

4.reverse

— 将列表倒序,返回值为空(None),直接修改列表本身

print(num.reverse()) # None
print(num) # 直接修改列表本身
print(num[::-1]) #生成新的列表

None
[1, 4, 3, 2, 1]
[1, 2, 3, 4, 1]

5.sorted

— 将列表从小到大排序,生成新的列表

sorted(列表,revers=False) — 从小到大排序
reverse = Ture — 从大到小排序

num1 = [23, 45, 89, 12]
print(sorted(num1))
print(sorted(num1,reverse=True))# 从大到小

[12, 23, 45, 89]
[89, 45, 23, 12]

6.sort

— 将列表从小到大排序,修改原列表

print(num1.sort(reverse = False))# 从小到大
print(num1)
print(num1.sort(reverse = True))# 从大到小
print(num1)

None
[12, 23, 45, 89]
None
[89, 45, 23, 12]

##7.extend
— 将一个容器中的元素添加到列表中

num1.extend('abca')
num1.extend([1, 2, 3])
print(num1)

[89, 45, 23, 12, ‘a’, ‘b’, ‘c’, ‘a’, 1, 2, 3]

7.index

— 查找元素

  • 从左向查找,找到元素立刻停止,返回下标
  • 若查找元素不存在,则报错
index1 = num1.index('a')
# 制定从下标为5的位置开始查找
index1 = num1.index('a', 5)
print(index1)

7

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

num1 = [89, 45, 23, 12, 'a', 'b', 'c', 'a', 1, 2, 3]
a_count = 0
for i in range(len(num1)):
    if num1[i] == 'a':
        a_count += 1
        if a_count == 2:
            print(i)
            break

7

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

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

[‘张三’, ‘李四’, ‘大黄’]

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

[‘张三’, ‘李四’, ‘大黄’]

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

[‘大黄’, ‘张三’, ‘李四’]

列表推导式

又名列表生成式,作用是生成一个有元素的列表

语法1

[表达式 for 变量 in 容器]
for循环每执行一次,表达式就会将其生成的结果添加到列表中

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

[1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1]

append()
append()适用于所有向列表中追加元素的操作
列表推导式在某些情况下可以替代append()
性能:列表推导式 > append()
列表推导式和append()性能对比如下:

import time

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

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

append方法一共花费9.33500051498413秒
列表推导式一共花费5.658776521682739秒

语法2

[表达式 for 变量 in 容器 if 条件]
for循环执行一次,if 分支判断一次,条件成立时表达式执行

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

[2, 4, 6, 8, 10]

语法3

[表达式 for 变量 in 容器 for 变量 in 容器]

list4 = [i for _ in range(2) for i in range(0, 11)]
print(list4)

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

练习
孪生数:两个素数的差等于2.找出100以内所有的孪生数

list = []
for i in range(3, 100):
    for j in range(2, i):
        if i % j == 0:
            break
    else:
        list.append(i)
print(list)
for a in range(len(list)-1):
    if list[a+1] - list[a] == 2:
        print(list[a], list[a+1])

[3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71,
73, 79, 83, 89, 97]
3 5
5 7
11 13
17 19
29 31
41 43
59 61
71 73

随机模块

random:随机模块(俄罗斯轮盘、抽奖)

import random

randint/randrange

randint(a, b) ----> 从[a,b]闭区间中随机获取一个整数
randrange(a,b) ----> 约等于randint + range

print(random.randrange(1, 4, 2))

3

choice()

----> 从容器中随机获取一个元素

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

3

choices()

---->从容器中随机获取k个元素,有重复元素(有放回地抽取元素)

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

[8, 4, 4]

sample()

----> 从有序序列中无放回地抽取k个元素

print(random.sample([1, 2, 3, 4, 5, 6, 7, 8], k=3))

[5, 4, 3]

shffule()

----> 将有序容器随机地打乱顺序,无返回值,修改序列本身

list1 = [1, 2, 3, 4, 5, 6, 7, 8]
print(random.shuffle(list1))
print(list1)

None
[8, 2, 3, 4, 1, 6, 7, 5]

练习
课堂点名器

name = ['张三', '李四', '王五', '赵六', '大黄']
random.shuffle(name)
result = random.choices(name, k=1)
print(result)

[‘李四’]

内幕:

while True:
    result = random.choices(name)
    if result == ['王五']:
        break
print(result)

[‘王五’]

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值