python基础—05字典、集合和序列

一、字典

1.1 可变类型,不可变类型

那么如何快速判断一个数据类型 X 是不是可变类型的呢?两种方法:

  • 麻烦方法:用 id(X) 函数,对 X 进行某种操作,比较操作前后的 id,如果不一样,则 X 不可变,如果一样,则 X 可变。
  • 便捷方法:用 hash(X),只要不报错,证明 X 可被哈希,即不可变,反过来不可被哈希,即可变。

数值、字符和元组 都能被哈希,因此它们是不可变类型
列表、集合、字典不能被哈希,因此它是可变类型。

1.2创建和访问字典

  • 通过字符串或数值作为key来创建字典
    字典定义语法为 {元素1, 元素2, …, 元素n}
    其中每一个元素是一个「键值对」-- 键:值 (key:value)
    关键点是「大括号 {}」,「逗号 ,」和「冒号 :」

    • 大括号 – 把所有元素绑在一起
    • 逗号 – 将每个键值对分开
    • 冒号 – 将键和值分开
  • dict() 创建一个空的字典

1.3 字典的内置方法

  • dict.fromkeys(seq[, value]) 用于创建一个新字典,以序列 seq 中元素做字典的键,value 为字典所有键对应的初始值。
  • dict.keys()返回一个可迭代对象,可以使用 list() 来转换为列表,列表为字典中的所有键。
  • dict.values()返回一个迭代器,可以使用 list() 来转换为列表,列表为字典中的所有值。
  • dict.items()以列表返回可遍历的 (键, 值) 元组数组。
  • dict.get(key, default=None) 返回指定键的值,如果值不在字典中返回默认值。
  • dict.setdefault(key, default=None)和get()方法 类似, 如果键不存在于字典中,将会添加键并将值设为默认值。
  • dict.pop(key[,default])删除字典给定键 key 所对应的值,返回值为被删除的值。key 值必须给出。若key不存在,则返回 default 值。

二、集合

2.1 创建

  • 先创建对象再加入元素。
  • 在创建空集合的时候只能使用s = set(),因为s = {}创建的是空字典。
basket = set()
basket.add('apple')
basket.add('banana')
print(basket)  # {'banana', 'apple'}
  • 使用set(value)工厂函数,把列表或元组转换成集合。
lst = [0, 1, 2, 3, 4, 5, 5, 3, 1]

temp = []
for item in lst:
    if item not in temp:
        temp.append(item)

print(temp)  # [0, 1, 2, 3, 4, 5]

a = set(lst)
print(list(a))  # [0, 1, 2, 3, 4, 5]

2.2 集合的内置方法

  • set.add(elmnt)用于给集合添加元素,如果添加的元素在集合中已存在,则不执行任何操作。
  • set.update(set)用于修改当前集合,可以添加新的元素或集合到当前集合中,如果添加的元素在集合中已存在,则该元素只会出现一次,重复的会忽略。
  • set.discard(value) 用于移除指定的集合元素。remove() 方法在移除一个不存在的元素时会发生错误,而 discard() 方法不会。
  • set.intersection(set1, set2) 返回两个集合的交集。
    set1 & set2 返回两个集合的交集。
    set.intersection_update(set1, set2) 交集,在原始的集合上移除不重叠的元素。
  • set.union(set1, set2) 返回两个集合的并集。
    set1 | set2 返回两个集合的并集。
    set.difference(set) 返回集合的差集。
  • set1 - set2 返回集合的差集。
    set.difference_update(set) 集合的差集,直接在原来的集合中移除元素,没有返回值。
    【即在set1中移除set2中有的元素】

三、序列

  • list(sub) 把一个可迭代对象转换为列表。
  • tuple(sub) 把一个可迭代对象转换为元组。
  • str(obj) 把obj对象转换为字符串
  • len(s) 返回对象(字符、列表、元组等)长度或元素个数。
  • max(sub)返回序列或者参数集合中的最大值
  • sum(iterable[, start=0]) 返回序列iterable与可选参数start的总和。
  • sorted(iterable, key=None, reverse=False) 对所有可迭代的对象进行排序操作
  • reversed(seq) 函数返回一个反转的迭代器。
  • enumerate(sequence, [start=0])用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。
  • zip(iter1 [,iter2 […]])
    用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象,这样做的好处是节约了不少的内存。
    我们可以使用 list() 转换来输出列表。
    如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。

问题

  1. sort() 和 sorted() 区别
    sort()是列表类型的方法,只适用于列表;
    sorted()是内置函数,支持各种容器类型。
    它们都可以排序,且用法类似,但sort()是在原地排序的,不会返回排序后的列表,而sorted()是返回新的排序列表。
L = ['python', 'shell', 'Perl', 'Go', 'PHP']
print( sorted(L))
#['Go', 'PHP', 'Perl', 'python', 'shell']
print(L)
#['python', 'shell', 'Perl', 'Go', 'PHP']
L.sort()
print(L)
#['Go', 'PHP', 'Perl', 'python', 'shell']
  1. 将[‘x’,‘y’,‘z’] 和 [1,2,3] 转成 [(‘x’,1),(‘y’,2),(‘z’,3)] 的形式。
a = ['x','y','z'] 
b = [1,2,3]

zipped = zip(a, b)
print(zipped)   # [('x', 1), ('y', 2), ('z', 3)]

a1, a2 = zip(*zip(a, b))
print(list(a1))  # ['x', 'y', 'z']
print(list(a2))  # [1, 2, 3]

你可能感兴趣的:(python)