python集合小技巧

学习python 集合的时候想到,可以利用集合去重的特性,优化很多问题,比如下面的一个问题:

重复元素判定。编写一个函数,接受列表作为参数,如果一个元素在列表中出现了不止一次,则返回True,但不要改变原来列表的值。同时编写调用这个函数和测试结果的程序:
代码如下:

def processList(raw):
    pro=raw.copy()
    flag=0
    for i in pro:
        x=pro.count(i)  #*通过一个判断位,利用count()方法,获得元素在列表内的个数,只要大于1就给判断位赋值,只要赋值为0就说明没有重复元素
        if x>1:
            flag+=1
    if flag!=0:
        print("True")
    else:
        print("False")

写的很烂,但是可以用集合优化它,如下:

def processList(raw):
    pro=list(set(raw.copy()))
    if len(pro)!=len(raw):   #*利用集合去重的特性,集合去重后必定与原列表长度不等,只要不等就说明有重复元素
        print("True")
    else:
        print("False")
processList(list(input("输入一个集合空格分隔不用打括号:").split(" ")))

再比如:
输入两个列表alist和blist,要求列表中的每个元素都为正整数且不超过10;
合并alist和blist,并将重复的元素去掉后输出一个新的列表clist。
可以使用以下实现列表alist的输入:
alist=list(map(int,input().split()))
同时为保证输出结果一致,请将集合内元素排序之后再输出。
如对于列表alist,可输出sorted(alist)。

代码可以如下:

alist=list(map(int,input().split()))     
blist=list(map(int,input().split()))
clist=list(set(alist+blist))            #*将数据转换成集合,再输入进列表。集合不允许数据重复,就完成了去重
print(clist)

甚至不需要再进行排序
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值