Python列表的运算、函数、去重、推导式和随机模块

一、列表的运算

1. 运算
1. 列表的重复
list1 = [1,2,3,4]
print(list1*3)
2. 列表的拼接
list2 = [4, 5, 6, 7]
print(list1 + list2)

​ 成员运算:in 、not in

3. 成员运算结果是布尔值
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]
# list1 = [1, 2, '3', 4]
# list2 = [1, 2, '4', 5]
# list1 = ['1', 2, '3', 4]
# list2 = [1, 2, '4', 5]
# TypeError: '<' not supported between instances of 'str' and 'int'
# print(list1 < list2)
练习:有两个列表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)
# ------------
A = [1, 'a', 4, 90]
B = ['a', 8, 'j', 1]
c = []
for i in A:
  for j in B:
    if i == j:
      c.append(i)
print(c)
2. 列表的方法和函数
1. max、min - 获取同类型数据中最大、最小值
num = [1、2、3、4]
print(max(num))
print(min(num))
2. count - 统计某个元素出现的个数
print(num.count(4))
# 1
print(num.count(5))
# 0

count()函数

描述:统计字符串里某个字符出现的次数,可以选择字符串索引的起始位置和结束位置。

语法:str.count(“char”, start,end) 或 str.count(“char”)

返回值:整型

参数说明:

str —— 要统计的字符(可以是单字符,也可以是多字符)

star —— 索引字符串的起始位置,默认参数为0

end —— 索引字符串的结束位置,默认参数为字符串长度即len(str)

3. sum - 求和
print(sum(num))
4. reverse - 将列表倒序,返回值为None ,直接修改列表本身
print(num.reverse())
print(num)
print(num[::-1])#切片将列表倒序,不修改原列表
5. sorted : 将列表从小到大排序,生成新的列表

sorted(列表,reverse = False) ---->从小到大排序,reverse = False默认,可不写

reverse = True —> 从大到小排序

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

列表.sort(reverse = False)

列表.sort(reverse = True)

num1 = [23,33,44,6,1]
print(sorted(num1))
print(sorted(num1, reverse=True))
print(num1)

print(num1.sort(reverse=False))
print(num1)
print(num1.sort(reverse=True))
print(num1)
6. extend() - 将一个容器中的元素添加到列表中
num1.extend('abcdea')
num1.extend([1, 2, 3])
print(num1)
7. 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
3. 列表去重

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

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

#方法二:
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)

#方法三:
print('方法三')
names = ['张三', '李四', '大黄', '张三', '张三', '李四', '李四']
index = 0
while index <= len(names) - 1:
  if names.count(names[index]) > 1:
#names.count(names[index])对列表names下标为0的元素计数
    del names[index]
  else:
    index += 1
print(names)
4.列表推导式(列表生成式)

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

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

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

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

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方法一共花费5.438493251800537秒
# 列表推导式方法一共花费3.0032365322113037秒

语法二:[ 表达式 for 变量 in 容器 if 条件 ]

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

# 将100以内所有的偶数添加进来
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)
'''
[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]
'''
练习:找出100以内所有的孪生数。孪生数:两个素数的差等于2
new_list = []
for i in range(2,101):
  if i == 2:
    print('2是素数')
    new_list.append(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]}和{new_list[x + 1]}是孪生数')
5.随机模块

random : 随机模块

俄罗斯轮盘、抽奖等。

import random

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

randrange() ->约等于randint + range

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

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

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

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

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

sample() 从有序容器中无放回的抽取K个元素

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

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

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

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

练习:课堂点名器
import random
names = ['张三','李四', '王五','胡六']
random.shuffle(names)
#设置内幕
while True:
     result = random.sample(names,k=1)
     if result == ['张三']:
         break
 print(f'被抽中的同学为:{result}')
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值