day05学习 Python列表

列表的运算

  • 列表的重复

    list1 = [1, 2, 3, 4]
    print(list1 * 10)
    
  • 列表的拼接

    list2 = [4, 5, 6, 7]
    print(list1 + list2)
    
  • 成员运算: innot in

    成员运算的结果是布尔值

    print(3 in [1, 3, 4])       # True
    print([3] in [1, 3, 4])     # False
    print([3] in [1, 2, 3, [3]]) # True
    
  • 比较大小

    • 比较大小的元素必须是同类型的
    • 比较大小比较的是第一对不相等元素的大小(容器 序列)
    • 数字正常比较大小
    list3 = [1, 2, 3, 4]
    list4 = [1, 2, 4, 5]
    print(list3 < list4)  # True
    
    list3 = [1, 2, '3', 4]
    list4 = [1, 2, '4', 5]
    print(list3 < list4)  # True ASCII
    
    list3 = ['1', 2, '3', 4]
    list4 = [1, 2, '4', 5]
    # print(list3 < list4) # TypeError: '<' not supported between instances of 'str' and 'int'
    

练习:有两个列表A和B,使用列表C来获取两个列表中公共的元素

例如: 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)

列表的方法和函数

  • maxmin - 获取同类型数据中最大、最小值

    num = [1, 2, 3, 4]
    print(max(num))
    print(min(num))
    
  • count - 统计某个元素出现个数

    print(num.count(4))     # 1
    print(num.count(5))     # 0
    
  • sum - 求和

    print(sum(num))     # 10
    
  • reverse - 将列表倒序,返回值为None,直接修改列表本身(返回值为None,一般都是修改了序列本身)

      print(num.reverse())
      print(num)
      print(num[::-1])  # 未修改数据本身
    
  • sorted: 将列表从小到大排序,生成新列表

    sorted(列表, reverse=False) -> 从小到大排序

    reverse = True -> 从大到小排序

    num1 = [23, 78, 0, 90]
    print(sorted(num1))
    print(num1)
    print(sorted(num1, reverse=True))
    print(num1)
    
  • sort: 将列表从小到大排序,修改原列表

    列表.sort(reverse=False)
    列表.sort(reverse=True)

    print(num1.sort())
    print(num1)
    print(num1.sort(reverse=True))
    print(num1)
    
    
  • extend() - 将一个容器中的每个元素添加到列表中

    num1.extend('abcdea')
    num1.extend([1, 2, 3])
    print(num1)
    
  • index - 查找元素

    从左向右查找,找到元素立刻停止,返回下标(只取第一个出现的元素)

    index1 = num1.index('a')
    # 指定从下标为5的位置开始查找
    # 如果查找元素不存在,报错
    index1 = num1.index('a', 5)
    print(index1)
    
    # 不是同index(),查找第二个a的下标
    num1 = [90, 78, 23, 0, 'a', 'b', 'c', 'd', 'e', '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
    

列表去重

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

names = ['张三', '李四', '大黄', '张三', '张三', '李四', '李四', '李四', '张三', '王五']
for _ in range(len(names) - 1):
    a = names.pop(0)
    if a not in names:
        names.append(a)
print(names)

# 方法一:
name_list = []
for i in names:
    if i not in name_list:
        name_list.append(i)
print(name_list)

# 方法二:
for i in range(len(names) - 1, -1, -1):
    if names.count(names[i]) > 1:
        del names[i]
print(names)

# 方法三:
index = 0
while index <= len(names) - 1:
    if names.count(names[index]) > 1:
        del names[index]
    else:
        index += 1
print(names)

列表推导式

(列表生成式)

作用:生成一个有元素的列表。

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

    nums = [i for i in range(1, 101)]
    print(nums)
    num_2 = [1 for _ in range(10)]
    print(num_2)
    
  • 语法二:[表达式 for 变量 in 容器 if 条件] - for循环执行一次,if分支判断一次,条件成立是表达式执行。

    list3 = [i for i in range(1, 101) if i % 2 == 0]
    print(list3)
    
  • 语法三:[表达式 for 变量 in 容器 for 变量 in 容器]

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

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}秒')

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

# 方法一:
list1 = []
for i in range(2, 100):
    for j in range(2, int((i ** 0.5) + 1)):
        if i % j == 0:
            break
    else:
        list1.append(i)
        if (i - 2) in list1:
            print(f'{i - 2}{i}是孪生数')

# 方法二:
num1 = [i for i in range(2,100) for j in range(2,i) if i % j == 0]
num2 = [i for i in range(2,101) if i not in num1]
num = [[num2[i],num2[i + 1]] for i in range(len(num2) - 1) if num2[i + 1] - num2[i] == 2]
print('孪生数为:',end = ' ')
for i in num:
	print(f'{i[0]}{i[1]}' , end = ' ')

随机模块

random: 随机模块

俄罗斯轮盘、抽奖等。

import random

  • randint(a, b) -> 从[a, b]闭区间中随机获取一个整数。

  • randrange() -> 等价于randint + range(左闭右开区间)

    print(random.randrange(1, 4, 2))
    
  • choice() -> 从容器中随机获取一个元素

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

    print(random.choice([1, 2, 3, 4]))
    print(random.choices([1, 2, 3, 4], k=5))
    
  • sample() -> 从有序容器中无放回的抽取K个元素

    print(random.sample([1, 2, 3, 4], k=5))  # ValueError: Sample larger than population or is negative
    
  • shuffle() -> 将有序容器随机打乱顺序,无返回值,修改序列本身

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

练习:课堂点名器

names = ['王1', '王2', '王3', '王4']
random.shuffle(names)
# 内幕:
while True:
    result = random.choices(names, k=1)
    if result == ['王2']:
        break
print(f'被抽中的同学为:{result}')
  • 使用PyQt/wxpython等GUI(图形可视化)进行可视化
  • 使用pyinstall将程序封装成windows的exe可执行文件
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值