Python中列表的运算、方法、函数、列表推导式和随即模块的使用

一、列表的运算

1.列表的重复

需要注意的是: * 后面的数字必须是整数

示例:

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

示例:

list2 = [4, 5, 6, 7]
print(list1 + list2)
3.成员运算

in、not in

成员运算结果是布尔值

示例:

print(3 in [1, 3, 4])
print([3] in [1, 3, 4])
print([3] in [1, 2, 3, [3]])
4.比较大小

a.比较大小的元素必须是同类型的

b.比较大小比较的是第一对不相等元素的大小(容器)

c.数字正常比较大小

示例:

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

当第一对不相等的元素同为字符串时,转化为ASCII码转换

list1 = [1, 2, '3', 4]
list2 = [1, 2, '4', 5]

会报错的示例:

list1 = [1, 2, '3', 4]
list2 = [1, 2, '4', 5]

会报错,'1’是字符串,1是整型,不是同类型

二、列表的方法和函数

1. max、min

获取同类型数据中最大、最小值(不然会报错)

示例:

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

统计某个元素出现个数

示例:

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

求和

print(sum(num))
4. reverse

列表独有方法
将列表倒序,返回值为None,直接修改列表本身
切片是生成新的列表,并非列表本身

示例:

print(num.reverse())
print(num)
print(num[::-1])
5. sorted、sort

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

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

示例:

num1 = [1, 23, 35, 13, 65]
print(sorted(num1))
print(sorted(num1, reverse=True))
print(num1)

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

sort(reverse=False) --> 从小到大排序
sort(reverse=True) --> 从大到小排序

示例:

num1 = [1, 23, 35, 13, 65]
print(num1.sort())  # 同为默认False
print(num1)
print(num1.sort(reverse=True))
print(num1)
4. extend()

将一个容器中的元素添加到列表中

示例:

num1.extend('abcdea') 
num1.extend([1, 2, 3])
print(num1)
5. index

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

示例:

index1 = num1.index('a')
# 指定从下标为6的位置开始查找
index1 = num1.index('a', 6)
print(index1)

练习:查找第二个a,不使用index

num1 = [65, 35, 23, 13, 1, 'a', 'b', 'c', 'd', 'e', 'a', 1, 2, 3]
a = 0
for i in range(len(num1)):
    if num1[i] == 'a':
        a += 1
        if a == 2:
            print(i)
            break
6.列表去重

有一个列表,要求去掉重复的人名
例如: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):
    print(i, names)
    if names.count(names[i]) > 1:
        del names[i]
print(names)

错误方法

names = ['张三', '李四', '大黄', '张三', '张三', '李四', '李四']
for i in names:
    print(names)  # 正向删除时,列表会自动向前移动,导致跳过一些元素
    if names.count(i) > 1:
        names.remove(i)
print(names)

法三

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

在这里,最终index = 3,使while循环不满足条件,结束循环

三、列表推导式(列表生成式)

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

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}秒')
语法1:[表达式 for 变量 in 容器]

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

示例:

for循环中变量用不上时用 _ 代替,单纯起循环作用

num = [i for i in range(1, 101)]
print(num)
num_2 = [1 for _ in range(10)]
print(num_2)
语法2:[表达式 for 变量 in 容器 if 条件]

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

示例:

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

示例:

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

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

法一:

list5 = []
for i in range(2, 101):
    if i == 2:
        list5.append(i)
    else:
        for j in range(2, i):
            if i % j == 0:
                break
        else:
            list5.append(i)
print(list5)
for n in range(len(list5)-1):
    if list5[n+1] - list5[n] == 2:
            print(f'{list5[n+1]}{list5[n]}是孪生数')

法二:

用列表推导式

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=' ')

四、随机模块

1. random:随即模块

import random

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

print(random.randint(1, 2))

3. randrange() -->约等于randint + range 左闭右开区间

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

4. choice() -->从容器中随机获取一个元素

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

5. choices()–>从容器中随机获取k个元素,有放回的抽取元素,k大于元素个数不会报错

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

6. sample() -->从容器中随机获取k个元素,无放回的抽取元素,k大于元素个数会报错

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

7. shffule() -->将有序容器随机打乱顺序,无返回值,修改序列本身

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

练习:课堂点名器

names = ['小明', '小李', '小华', '小方']
random.shuffle(names)
result = random.choices(names, k=1)
print(f'被抽中的是:{result}')

若有黑幕,只抽中一个人

names = ['小明', '小李', '小华', '小方']
random.shuffle(names)
while True:
    result = random.choices(names, k=1)
    if result == ['小华']:
        break
print(f'被抽中的是:{result}')

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值