python入门13 集合set
set集合与数学中的集合同一个概念,是无序不重复元素组成的。
#coding:utf-8
#/usr/bin/python
"""
2018-11-10
dinghanhua
集合
""" '''集合是无序的不重复的元素序列,不支持索引''' '''定义'''
set1 = {1,2,3,2}
print(set1) #元素不重复 set2 = set('python is easy to use')
print(set2)
'''set用于list,string去重'''
li = ['peter','jary','peter','fee']
set_list = list(set(li)) #set > list
print('取list不重复的数据',set_list) str1 = 'jwejfewfjewpfjepw'
set_str = str(set(str1))
print('set用于取字符串的不重复字符:',set_str)
'''添加、删除元素、长度、元素是否存在'''
set1.add('grape')
print(set1) set2.update(['watermelon'])
set2.update(('pear','apple'))
set2.update({'whatever'})
print(set2) set2.remove('apple')
set2.discard('tomato')
which = set2.pop() #随机删
print(which)
print(set2) #长度
print(len(set1))
#清空
set1.clear()
print(set1)
#是否包含某元素
print( 'apple' in set2)
'''集合的运算:并集、差集、交集'''
set1 = {'apple','pear','banana'}
set2 = {'peach','orange','tomato','potato','pear'}
set3 = {'banana'} print('交集 在set1,set2同时存在的',set1&set2)
print(set1.intersection(set2)) print('差集,在set1,不在set2的',set1-set2)
print(set1.difference(set2)) print('只在一个集合里的',set1^set2)
print(set1.symmetric_difference(set2)) print('并集,在set1或set2的',set1 | set2)
print(set1.union(set2)) print(set1.isdisjoint(set2)) #是否没有交集 有交集-False,没交集-True
print(set3.issubset(set2)) #set3是否是set2的子集
print(set1.issuperset(set3)) #set1是否是set3的父集
'''练习:a和b大列表去重'''
a = [1,3,5,3,2,6]
b = [3,2,2,6,4]
c = []
for x in a+b:
if x not in c:
c.append(x)
print(c)
ss = list(set(a+b)) #set的不重复性去重
c1 = sorted(list(set(a+b)),key = (a+b).index)
print(c1) li = {}.fromkeys(a+b).keys() #利用字典keys不重复特性去重
'''练习:去除姓氏(只考虑单姓)相同的人员,保留最后一个'''
li = ['刘能','王老七','谢广坤','赵玉田','杨晓燕','刘大脑袋','王长贵','谢飞及','赵四','王大拿'] # 从后往前遍历每个元素,当姓氏不存在与姓氏列表中则分别插入姓名和姓氏
linew = []
lixing = []
for x in li[::-1]: #从后往前取
if x[0] not in lixing: #姓氏不存在,则插入姓氏,插入人名
linew.insert(0,x) #在第一个位置插入人名,保持顺序
lixing.append(x[0]) #插入姓氏
print(linew)
linew = []
for x in li[::-1]: #从后往前取
if x[0] not in set([y[0] for y in linew]): #姓氏在新列表中不存在
linew.insert(0,x)
print(linew)
# 取出所有姓氏,从后往前遍历,遍历到所有姓氏均取出一个姓名为止
set_xing = set([x[0] for x in li]) #取出所有的姓氏
linew = []
for x in li[::-1]:
if x[0] in set_xing:
linew.insert(0,x) #匹配一个插入一个
set_xing.remove(x[0]) #匹配上的姓去掉
if len(set_xing) == 0:
break #集合为空跳出循环
print(linew) # 取出所有姓氏,遍历姓氏在列表中的索引,取索引对应的姓名
li_xing = [x[0] for x in li[::-1]] #倒着取出姓氏
set_xing = sorted(list(set(li_xing)),key = lixing.index) #取出姓氏集合,转化为列表保持与列表同一顺序
linew = []
for x in set_xing:
xindex = li_xing.index(x) #取姓在姓氏列表里面的索引
linew.insert(0,li[::-1][xindex]) #根据索引取名字
print(linew) # map函数
def func(x):
for y in li[::-1]:
if x[0] == y[0]:
return y
li2 = set(map(func,li))
print(li2) # 取出所有姓氏,遍历集合,在列表从后往前找匹配的姓名
set_xing = set( [x[0] for x in li]) #取出姓氏集合
linew = []
for x in set_xing:
for name in li[::-1]:
if name.startswith(x):
linew.append(name)
break
print(sorted(linew,key = li.index))
# dict key的不重复特性
dict_name = {}
for name in li:
dict_name[name[0]] = name
print(dict_name)
the end!
python入门13 集合set的更多相关文章
- python入门之集合set
集合(无序不重复) 创建 s = {} s = set() 转换 s = set(li) 方法 s.add("chy") #添加元素 s.clear() #清除元素 a = s.d ...
- Python入门篇-封装与解构和高级数据类型集合(set)和字典(dict)
Python入门篇-封装与解构和高级数据类型集合(set)和字典(dict) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.封装和结构 #!/usr/bin/env pytho ...
- Python 入门学习 -----变量及基础类型(元组,列表,字典,集合)
Python的变量和数据类型 1 .python的变量是不须要事先定义数据类型的.能够动态的改变 2. Python其中一切皆对象,变量也是一个对象,有自己的属性和方法 我们能够通过 来查看变量的类型 ...
- python入门 集合(四)
集合 集合是一个无序的不重复元素序列,可以迭代,也可以修改.集合迭代的时候元素是随机的. 集合通常用来 membership testing, 去重, 也可以用来求交集并集补集. 介绍一下如何创建集合 ...
- 大爽Python入门教程 1-3 简单的循环与判断
大爽Python入门公开课教案 点击查看教程总目录 这里只初步认识下循环和判断,以便于我们去实现一些简单的计算. 循环和判断的详细知识和细节,我们将在后面的章节(大概是第三章)展开阐述. 1 初步了解 ...
- python入门练习题1
常见python入门练习题 1.执行python脚本的两种方法 第一种:给python脚本一个可执行的权限,进入到当前存放python程序的目录,给一个x可执行权限,如:有一个homework.py文 ...
- Python入门版
一.前言 陆陆续续学习Python已经近半年时间了,感觉到Python的强大之外,也深刻体会到Python的艺术.哲学.曾经的约定,到现在才兑现,其中不乏有很多懈怠,狼狈. Python入门关于Pyt ...
- Python入门介绍
Python入门介绍(人生苦短,我用 Python) Python简介 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹 ...
- Python 入门必学经典知识点笔记【肯定有你不知道的】
前言本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:实验楼 Python 作为近几年越来越流行的语言,吸引了大量的学员开始学 ...
随机推荐
- Oracle子分区(sub partition)操作
要重新定义大量分区表. 首先看 SQL Reference 大致了解了 Oracle 的分区修改操作.Alter table 语句的alter_table_partitioning 子句可以分为以下几 ...
- linux下安装软件的方法(mariadb)
一.方式 1. rpm (不推荐使用) 2. yum 安装(非常方便快捷) 3. 编译安装(需要自定制的时候才使用) 二.技术栈 #闭源收费的技术栈: svn + java + apache(web服 ...
- VS2015打开特定项目就崩溃
今天在打开之前写的项目的时候,一开vs就崩溃关闭了,打开其他项目的.sln和.vsproj就可以,唯独有1个项目打不开,也不知道为啥,气死了. 去网上找到的解决办法: 步骤1:开始–>所有程序– ...
- centos 安装xrdp远程连接桌面
1. 安装epel库,否则无法安装xrdp yum install epel-release 2.安装 xrdp yum install xrdp 3. 安装tigervnc-server yum i ...
- DataX 安装和使用
阿里云介绍: 1. 下载安装包.作为阿里主要的数据传输工具Datax,阿里已经完全开源到github上面了.下载地址(https://github.com/alibaba/DataX). 2. 安装环 ...
- VUE 日历签到
<style lang="scss"> @import "../assets/css/px2rem.scss"; .sign-box { width ...
- React.js 小书 Lesson13 - 渲染列表数据
作者:胡子大哈 原文链接:http://huziketang.com/books/react/lesson13 转载请注明出处,保留原文链接和作者信息. 列表数据在前端非常常见,我们经常要处理这种类型 ...
- 【ubuntu】更换下载源
ubuntu,我们在使用apt新装软件的时候,会使用官方的网站去下载软件,但是会因为国内的转接点太多,而导致下载的速度非常慢 ,我们可以通过换成一些中间的节点来进行下载,比如阿里源,中科大源,清华源等 ...
- 网络连接和初始HTTP请求
浏览器检索网页,先从URL开始,使用DNS确定IP地址,再用基于TCP和HTTP协议连接到服务器,请求相关的内容,得到相应,浏览器解析并呈现到屏幕上.服务器响应后,浏览器响应不会同时全部到达,会陆续到 ...
- Vue2.0以后,有哪些变化
最近移动端项目版本升级,Vue由之前的1.0升级到2.3,那么,Vue2.0之后,有哪些细节的变化呢,现在总结如下: 1.在每个组件模板,不再支持片段代码 组件中模板: 之前: <templat ...