Python 编程——集和

一、集合的定义

集和里面的元素是不可重复的

>>> s = {1,2,3,4,5,6,1,2,3}
>>> print(s,type(s))
(set([1, 2, 3, 4, 5, 6]), <type 'set'>)

空集和的定义

>>> s2 = {}
>>> print(s2,type(s2))      #默认情况下是dict(字典)
({}, <type 'dict'>)
>>> s3 = set([])            #将空列表转换为集和
>>> print(s3,type(s3))
(set([]), <type 'set'>)

用于元组或列表的去重

>>> li = [1,2,3,2,1,4]
>>> print(list(set(li)))
[1, 2, 3, 4]

二、集合的特性

集和支持的特性只有 成员操作符、for循环遍历(索引 切片 重复 连接 均不支持)

1.成员操作符
>>> s = {1,2,3}
>>> print(1 in s)
True
>>> print(2 not in s)
False
2.for循环遍历
s = {1,2,3}
for i in s:
    print(i,end='')
print()
print('~~~~~~~~')

测试:

123
~~~~~~~~

列出索引值对应的值
for + index

s = {1,2,3}
for i,v in enumerate(s):
    print('index: %s,value: %s' %(i,v))

测试:

index: 0,value: 1
index: 1,value: 2
index: 2,value: 3

三、集和常用的方法

集和是可变的数据类型;添加顺序,和在集和中存储的顺序不同。

1.集和中元素的增加add()
>>> s = {6,7,3,1,2,3}
>>> s.add(8)
>>> s.add(4)
>>> print(s)
set([1, 2, 3, 4, 6, 7, 8])

update()增加多个元素

>>> s = {6,7,3,1,2,3}
>>> s.update({2,6,7,9})
>>> print(s)
set([1, 2, 3, 6, 7, 9])
2.集和中元素的删除

pop()删除

>>> s = {6,7,3,1,2,3}
>>> s.pop()
1
>>> s.pop()
2
>>> print(s)
set([3, 6, 7])

remove()删除指定元素,元素要存在

>>> s = {6,7,3,1,2,3}
>>> s.remove(3)
>>> print(s)
set([1, 2, 6, 7])
3.集和与集和之间的并集union()
s1 = {1,2,3}
s2 = {2,3,4}

print('并集:',s1.union(s2))
print('并集:',s1 | s2)

测试:

并集: {1, 2, 3, 4}
并集: {1, 2, 3, 4}
4.集和与集和之间的交集intersection()
s1 = {1,2,3}
s2 = {2,3,4}

print('交集:',s1.intersection(s2))
print('交集:',s1 & s2)

测试:

交集: {2, 3}
交集: {2, 3}
5.集和与集和之间的差集difference()

s1 与 s2的不同(即s1中有哪些s2没有的元素)

s1 = {1,2,3}
s2 = {2,3,4}

print('差集:',s1.difference(s2))
print('差集:',s1 - s2)

测试:

差集: {1}
差集: {1}

s2 与 s1的不同(即s2中有哪些s1没有的元素)

s1 = {1,2,3}
s2 = {2,3,4}

print('差集:',s2.difference(s1))
print('差集:',s2 - s1)

测试:

差集: {4}
差集: {4}
6.集和与集和之间的对等差分symmetric_difference()

对等差分:并集 - 交集

s1 = {1,2,3}
s2 = {2,3,4}

print('对等差分:',s1.symmetric_difference(s2))
print('对等差分:',s1 ^ s2)

测试:

对等差分: {1, 4}
对等差分: {1, 4}
7.判断集和之间的关系

issubset()子集判断

s3 = {1,2}
s4 = {1,2,3}
print(s3.issubset(s4))    #s3是否为s4的子集

测试:

True

issuperset()超集判断

s3 = {1,2}
s4 = {1,2,3}
print(s3.issuperset(s4))  #s3是否为s4的超集

测试:

False

isdisjoint()交集判断

s3 = {1,2}
s4 = {1,2,3}
print(s3.isdisjoint(s4))  #两个集和是不是相交

测试:

False

练习题:

华为机测题:
明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性他先用计算机生成了N个1~1000之间的随机整数(N<=1000),N是用户输入的,对于其中重复的数字,只保留一个,把其余相同的数字去掉,不同的数对应着不同的学生的学号,然后再把这些数从小到大排序,按照排好的顺序去找同学做调查,请你协助明明完成“去重”与排序工作

import random
s = set([])
for i in range(int(input("N:"))):
    s.add(random.randint(1,1001))
print(sorted(s))    

管理员登陆:
1.后台管理员只有一个用户: admin, 密码: admin
2.当管理员登陆成功后, 可以管理前台会员信息.
3.会员信息管理包含:
添加会员信息
删除会员信息
查看会员信息
退出

print('管理员登陆'.center(50,'*'))
inuser = input('Username:')
inpasswd = input('Password:')

users = ['root','westos']
password = ['123','456']

if inuser == 'admin' and inpasswd == 'admin':
    print('管理员登陆成功')
    print('会员管理'.center(50,'*'))
    while True:
        print("""
            操作目录
        1.添加会员信息
        2.删除会员信息
        3.查看会员信息
        4.退出
        """)
        choice = input('请选择你的操作:')
        if choice == '1':
            print('添加会员信息'.center(50,'*'))
            addUser = input('添加会员名称')
            if addUser in users:
                print('用户%s已经存在' %(addUser))
            else:
                addPasswd = input('密码:')
                users.append(addUser)
                password.append(addPasswd)
                print('添加用户%s成功' %(addUser))
        elif choice == '2':
            print('删除会员信息'.center(50,'*'))
            delUser = input('删除的会员名:')
            delIndex = users.index(delUser)
            users.remove(delUser)
            password.pop(delIndex)
            print('删除会员%s成功' %(delUser))
        elif choice == '3':
            print('查看会员信息'.center(50,'*'))
            print('\t用户名\t密码')
            userCount = len(users)
            for i in range(userCount):
                print('\t%s\t%s' %(users[i],password[i]))
        elif choice == '4':
            exit()
        else:
            print('请输入正确的选择')
else:
    print('管理员登陆失败!')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值