【Python】列表相关运用

Python中,组合数据类型序列(字符串、列表、元组)、字典集合

# 冒泡排序

ls=[3,5,4,9,6]
for i in range(4):
    for j in range(i+1,5):
        if ls[i]<ls[j]:
            ls[i],ls[j]=ls[j],ls[i]
print(ls)# [9, 6, 5, 4, 3]

# 计算天数

import time
date = time.localtime()      # 获取当前日期时间
print(date)
year,month,day = date[:3]  # 获取年月日
day_month=[31,28,31,30,31,30,31,31,30,31,30,31]
if year%400==0 or (year % 4==0 and year %100!=0):
    day_month[1] = 29
if month==1:
    print('今天是今年的第',day,end = "天")
else:
    print('今天是今年的第',(sum(day_month[:month - 1])+day),end = "天")

# 将列表中相同的元素只保留一个

方法一 新建列表,查重

list1 = list('bcdbcaaaaaaa')
list2 = list1.copy()
list1 = []
for i in list2:
    if i not in list1:# 若list1中不含list2元素则引进
        list1.append(i)
print(list1)

方法二 循环删除

list1 = ['b','c','d','b','c','a','a']
for i in list1.copy():
    c= list1.count(i)# 判断出现次数
    if c>1:
        for j in range(c-1):# 判断需删除次数
            list1.remove(i)# 删同
print(a)

# 寻找给定序列中相差最小的两个数字

方法一 通过最小差索引和删除次数 判断减数与被减数

seq = [12,56,776,43,123,456,78,77,90]
seq.sort(reverse=True)# 降序
flag = 1
temp = 0
ls = list(map(lambda x,y:x - y,seq[:-1],seq[1:]))# 降序相错作差构成新列表
Min = min(ls)# 记录最小差
Index = ls.index(Min)
print("相差最小的数字为:",seq[Index],seq[Index+1],end = '\n')
while flag:
    del ls[ls.index(Min)]# 删除第一个最小差
    temp = temp + 1# 记删除次数
    if Min == min(ls):# 若能找到新的最小差与第一个相等
        Index = ls.index(Min) + temp
        print("相差最小的数字为:",seq[Index],seq[Index+1],end = '\n')
    else:
        flag = 0
print("相差:",Min)

方法二 通过最小差次数删同 通过索引 判断减数与被减数

seq = [12,56,776,43,74,75,76,77,90]
seq.sort(reverse=True)# 降序
ls = list(map(lambda x,y:x - y,seq[:-1],seq[1:]))# 降序相错作差构成新列表
Min = min(ls)# 记录最小差
Index = ls.index(Min)
print("相差最小的数字为:",seq[Index],seq[Index+1],end = '\n')
num = ls.count(Min)# 判断出现次数
if num > 1:
    for j in range(1,num):# 判断需删除次数
        ls.remove(Min)# 删同
        Index = ls.index(Min)+j
        print("相差最小的数字为:",seq[Index],seq[Index+1],end = '\n')
print("相差:",Min)

# 变量赋值、切片复制、深度复制、浅复制的区别

import copy
s1 = [4,5,6]
s2=s1
s2[1] = "nk"
# s2只复制s1地址,改变一个另一个也改变
print(s1,s2)# [4, 'nk', 6] [4, 'nk', 6]
s3 = s1[1:3]
s3[1] = "cn"
# 切片复制后s3s1地址不同,可以单独修改
print(s1,s3)# [4, 'nk', 6] ['nk', 'cn']
s4 = copy.deepcopy(s1)
s4[1] = 333
# 深度复制后s4s1地址不同,可以单独修改
print(s1,s4)# [4, 'nk', 6] [4, 333, 6]
s5 = [4,[5,6]]
s6 = s5[1:3]
s5[1][0] = "cn"
# 切片复制后s5s6地址不同但列表内元素值的存储地址相同,若改变列表内的列表元素另一个也改变
print(s5,s6)# [4, ['cn', 6]] [['cn', 6]]
s7 = copy.deepcopy(s5)
s7[1] = "nk"
# 深度复制后s5s7地址不同,可以单独修改
print(s5,s7)# [4, ['cn', 6]] [4, 'nk']

# 输入一个英语段落,仅包括单词及空格,统计其中每个单词出现的次数,并输出结果

方法一 先降序排列 通过重复次数判断下一单词位置 并捕获索引错误 

paragraph = input("输入:")
paragraph = paragraph.split(" ")
paragraph.sort(reverse=True)# 降序排列
num = paragraph.count(paragraph[0])
Index = num
print(paragraph[0],"出现次数:",num)
flag = 1
while flag:
    try:
        num = paragraph.count(paragraph[Index])
        print(paragraph[Index],"出现次数:",num)
        Index = Index + num# 根据重复次数判断下一个不同单词的索引
    except IndexError:# 若索引超出则跳出循环
        flag = 0

 方法二 先复制 删同 再找出现次数,避免边删边for的相互影响

paragraph = input("输入:")
paragraph = paragraph.split(" ")
temp = []
for i in paragraph:
    if i not in temp:
        temp.append(i)# 先删同
for i in temp:
    num = paragraph.count(i)# 再找出现次数
print(i,"出现次数:",num)

一些不咋记得的函数

# 降序排列
print(sorted([1, 2, 3], reverse=True)
# 颠倒
list(reversed([1, 2, 3]))
# 已知列表 x = [1, 2],那么表达式 list(enumerate(x)) 的值为
[(0, 1), (1, 2)]# 索引和元素值构成元组
# 表达式 list(zip([1,2], [3,4])) 的值为
[(1, 3), (2, 4)]# 压缩成元组格式
# 表达式 list(map(list,zip(*[[1, 2, 3], [4, 5, 6]]))) 的值为
[[1, 4], [2, 5], [3, 6]]# 压缩后换成列表格式

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

*Min*

写的不好多多包涵~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值