首页 > 其他 > 详细

元组tuple、字典dict、集合set

时间:2019-03-26 00:57:47      阅读:162      评论:0      收藏:0      [点我收藏+]

一、元组tuple

定义:与列表相比,只是把 [ ] 换成 ( )

t1 = (1, 2)
t2 = tuple((1, 2))
t3 = (1, )
思考:如何定义一个只有一个值的元组
print(("Owen", ))
print(tuple([Owen]))

 

1、参数为for可以循环的对象(可迭代对象)

t2 = tuple("123")       #字符串
print(t2, type(t2))
t3 = tuple([1, 2, 3])   #列表
print(t3, type(t3))
t4 = tuple((7, 8, 9))   #元组
print(t4, type(t4))

2、索引取值

t = (1,2,3,2,3,2)
    print(t[1])
    print(t[-2])

3、切片

print(id(t))
nt=t[:-1:]
print(nt,id(nt))

4、长度

print(len(t))

5、元组内置方法

print(t.count(2))    #该数据集合可以存放相同数据
print(t.index(2,1,2))

6、元组取值的两个方法:6.1、.count(obj) 

                                          6.2、 .index(obj, bIndex, eIndex)

7、有序存储 | 可存放多个数据 | 不可变(内部可以包含可变对象,可变对象已久可变)

 

8、应用场景:将不允许操作的列表可以转化为元组,将允许操作的元组转化为列表

 

二、字典dict

声明:dict的key:可以为所有不可变类型:int float tuole str bool None,一般就采用字符串

           dict的value:可以为所有数据类型

注:key具有唯一性(重复会覆盖旧值),value可以重复

dic = {1: None, None: None, 3.14: None,
           True: None, abc: None, (1,): None,
           None: 12345
           }
        print(dic)

    # 1、
    d1 = {name: Owen, age: 18}
        print(d1)
    # 2、
    d2 = dict({name: Owen, age: 18})
           print(d2)
    # 3、
    d3 = dict(name=Egon, age=58)
        print(d3)

1、定义

d1 = {a: 10, b: 20}

2、无序,存放多个值,可变 => 通过key取值

d1[a]

3、增删改查

d1[key] = value: key存在就是改,不存在就是增
d1[key]: 取,如果key存在就报错,所以用get(key, defalut)
update({a: 100, c: 300}): key有更新,无新增
pop(key): 根据key删且返回对应value

4、key存在,不操作,不存在设置key=default 

setDefault(key, default)

5、get取值*****

dic = {a: 10, b: 20}
        # print(dic[‘c‘])  # KeyError
    res = dic.get(c)  # 拥有默认值,None,可以避免错误
        print(res)
    res = dic.get(d, key不存在)  # 可以自定义默认值
        print(res)

6、随机删除,返回值是(key, value)

print(dic)
print(dic.popitem())
print(dic.popitem())
print(dic)

7、如何定义一个空字典

7.1、第一个参数:keys:list|tuple|str,第二个参数:统一的默认value
    d10 = {}.fromkeys([a, b, c], ‘‘)
        print(d10)  # {‘a‘: ‘‘, ‘b‘: ‘‘, ‘c‘: ‘‘}

7.2、独自设置默认值
    d11 = {a: 10, teas: [Owen]}
    d11 = {a: 10}

7.3、添加老师

如果有teas,在原teas基础上添加老师,如果没有,新建一个空teas
    if teas not in d11:  # 成员运算
        d11[teas] = []
    d11[teas].append(Egon)
    d11[teas].append(LiuXX)
        print(d11)

原d11中,如果有teas这个key,setdefault相当于什么都没干
如果没有,就将第二个参数(默认值)传给teas存放到d11中
    d11.setdefault(teas, [])
    d11[teas].append(Egon)
    d11[teas].append(LiuXX)
        print(d11)    

 

三、集合set

1、定义

s1 = set()
s2 = set({1, 2, 3})

2、重点:数据具有唯一性

# i) 单列数据集合:str,list,tuple,set 双列:dict
# ii) 无序存储:无key无index,无法取值
# iii) 可变数据类型,内部可以存放任意类型数据,但数据具有唯一性

 

{}代表空字典,用set()来创建空集合
s1 = set()
  print(s1, type(s1))
s2 = set(abc)
  print(s2, type(s2))

 

3、运算

p_set = {a, b, c, egon}
l_set = {x, y, z, egon}

3.1、交集

res = p_set & l_set
  print(res)
res = p_set.intersection(l_set)
  print(res)  # {‘egon‘}

3.2、并集

res = p_set | l_set
  print(res)
res = p_set.union(l_set)
  print(res)  # {‘z‘, ‘c‘, ‘y‘, ‘x‘, ‘b‘, ‘a‘, ‘egon‘}

3.3、差集

res = p_set - l_set
    print(res)  # {‘a‘, ‘b‘, ‘c‘}
res = l_set.difference(p_set)
    print(res)  # {‘x‘, ‘z‘, ‘y‘}

3.4、对称差集

res = p_set ^ l_set
  print(res)
res = p_set.symmetric_difference(l_set)
  print(res)  # {‘y‘, ‘a‘, ‘b‘, ‘x‘, ‘z‘, ‘c‘}

4、了解:

sup_set = {1, 2, 3, 4, 5}
sub_set = {1, 2, 3}
temp_set = {3, 2, 1}
flag_set = {7, 8, 9}

print(sup_set > sub_set)  # True
print(sup_set < sub_set)  # False
print(temp_set == sub_set)  # True

# 两个set是否没有交集 res = flag_set.isdisjoint(temp_set) # True

5、添加删除操作

s = set()
s.add(abc)
s.add(xyz)
print(s)
res = s.pop()  # 随机删除一个ele元素
print(res)
if xyz in s:
s.remove(xyz)  # 有ele删除,无ele抛异常

6、利用set去重

classes = set()
for _, cless in class_map:
    classes.add(cless)
classes = list(classes)
print(classes)

7、了解:父子set

sup_set = {1, 2, 3, 4, 5}
sub_set = {1, 2, 3}
temp_set = {3, 2, 1}
flag_set = {7, 8, 9}

print(sup_set > sub_set)
print(sup_set < sub_set)
print(temp_set == sub_set)

8、案例

技术分享图片
选课:
class_map = [
    (owen, python),
    (egon, linux),
    (egon, python),
    (liuxx, python),
    (liuxx, java)
]
需求:
1.多少人参加了选课: [owen, egon, liuxx]
2.都选了哪些课程: [python, linux, java]
#利用逻辑代码去重
names = []
for name, _ in class_map:
    # 判断列表中是否已存在,不存在才添加
    if name not in names:
        names.append(name)
print(names)
案例:选课

 

元组tuple、字典dict、集合set

原文:https://www.cnblogs.com/wangyisen/p/10597562.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!