【1.8】集合作业

  一.关系运算
  有如下两个集合,pythons是报名python课程的学员名字集合,linuxs是报名linux课程的学员名字集合
  pythons={'alex','egon','yuanhao','wupeiqi','gangdan','biubiu'}
  linuxs={'wupeiqi','oldboy','gangdan'}
  1. 求出即报名python又报名linux课程的学员名字集合
  2. 求出所有报名的学生名字集合
  3. 求出只报名python课程的学员名字
  4. 求出没有同时这两门课程的学员名字集合
pythons = {'alex', 'egon', 'yuanhao', 'wupeiqi', 'gangdan', 'biubiu'}
linuxs = {'wupeiqi', 'oldboy', 'gangdan'}
#   1. 求出即报名python又报名linux课程的学员名字集合
inter = pythons.intersection(linuxs)
print inter
#   2. 求出所有报名的学生名字集合
al = pythons.union(linuxs)
print al
#   3. 求出只报名python课程的学员名字
pyonly = pythons.difference(linuxs)
print pyonly
#   4. 求出没有同时这两门课程的学员名字集合
# 这里就用symmetric_difference

xx = pythons.symmetric_difference(linuxs)
print xx

# 下面是解释 symmetric_difference

onlyone = (pythons.union(linuxs)).difference(pythons.intersection(linuxs))
print onlyone

   二.去重

   1. 有列表l=['a','b',1,'a','a'],列表元素均为可hash类型,去重,得到新列表,且新列表无需保持列表原来的顺序

   2.在上题的基础上,保存列表原来的顺序

   3.去除文件中重复的行,肯定要保持文件内容的顺序不变
   4.有如下列表,列表元素为不可hash类型,去重,得到新列表,且新列表一定要保持列表原来的顺序

l=[
    {'name':'egon','age':18,'sex':'male'},
    {'name':'alex','age':73,'sex':'male'},
    {'name':'egon','age':20,'sex':'female'},
    {'name':'egon','age':18,'sex':'male'},
    {'name':'egon','age':18,'sex':'male'},
]
    二.去重
#


#    1. 有列表l=['a','b',1,'a','a'],列表元素均为可hash类型,去重,得到新列表,且新列表无需保持列表原来的顺序
l=['a','b',1,'a','a']
ListNew = list(set(l))
print ListNew

#    2.在上题的基础上,保存列表原来的顺序
# 这里没有用集合的方法
l=['a','b',1,'a','a']
l1=[]
for i in l:
    if i not in l1:
        l1.append(i)
print l1

# 或者用集合这样的方法
li=[]
set1 = set()
l=['a','b',1,'a','a']
for i in l:
    if i not in set1:
        set1.add(i)
        li.append(i)
print set1
print li
#    3.去除文件中重复的行,肯定要保持文件内容的顺序不变
import os
import os
with open('db.txt','r',encoding='utf-8') as read_f,\
        open('.db.txt.swap','w',encoding='utf-8') as write_f:
    s=set()
    for line in read_f:
        if line not in s:
            s.add(line)
            write_f.write(line)
os.remove('db.txt')
os.rename('.db.txt.swap','db.txt')
#    4.有如下列表,列表元素为不可hash类型,去重,得到新列表,且新列表一定要保持列表原来的顺序
l=[
    {'name':'egon','age':18,'sex':'male'},
    {'name':'alex','age':73,'sex':'male'},
    {'name':'egon','age':20,'sex':'female'},
    {'name':'egon','age':18,'sex':'male'},
    {'name':'egon','age':18,'sex':'male'},
]
#不用集合的概念 也可以完成去重
li=[]
for i in l:
    if i not in li:
        li.append(i)
print li

# 或则:
li=[]
s = set()
for i in l:
    val = (i["name"],i["age"],i["sex"])
    if val not in s:
        s.add(val)
        li.append(i)
print s
print li

因为这里不用字典 列表作为 set 的参数

set 参数必须要是可以hash的


posted @ 2016-03-15 14:25  科学小怪癖  阅读(97)  评论(0)    收藏  举报