python-小知识点 ---常用类型转换

python 常用类型简述

数字:包含整数,浮点数,布尔值,直接赋值即可,不可变
字符串:直接赋值即可,可以使用下标取值,不可变
列表(list):有序集合,可变,可以使用下标取值
元组(tuple):类似list,初始化后不能修改,不可变
字典(dict):使用键值对的方式存储和获取,查询快速,可变,
集合(set):类似字典,但没有key, 值不能重复,可用于去重,可变

常用类型之间的转换

先介绍常用函数:

enumerate :将一个可迭代对象组合为一个索引序列,同时列出数据和数据下标,返回元组对,一般用在 for 循环当中

语法
enumerate(sequence, [start=0])
 - sequence -- 一个序列、迭代器或其他支持迭代对象。
 - start -- 下标起始位置。

zip  函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表(python3 返回的是一个可迭代对象)

语法

zip([iterable, ...]) #一个或多个可迭代对象

如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同
利用 * 号操作符,可以将元组解压为列表

p = ['川', '鄂', '赣', '甘', '贵', '黔', '桂', '黑', '沪']
d = [(0, '川'), (1, '鄂'), (2, '赣'), (3, '甘'), (4, '贵'), (5, '黔'), (6, '桂'), (7, '黑'), (8, '沪')]
index = range(5)
print(list(zip(index, p)))
print(list(zip(*d)))

输出:
[(0, '川'), (1, '鄂'), (2, '赣'), (3, '甘'), (4, '贵')]
[(0, 1, 2, 3, 4, 5, 6, 7, 8), ('川', '鄂', '赣', '甘', '贵', '黔', '桂', '黑', '沪')]

operator.itemgetter函数
operator模块提供的itemgetter函数用于获取对象的哪些维的数据,参数为需要获取的数据在对象中的序号

a = [1,2,3] 
>>> b=operator.itemgetter(1)      //定义函数b,获取对象的第1个域的值
>>> b(a) 
2 
>>> b=operator.itemgetter(1,0)  //定义函数b,获取对象的第1个域和第0个的值
>>> b(a) 
(2, 1)

要注意,operator.itemgetter函数获取的不是值,而是定义了一个函数,通过该函数作用到对象上才能获取值,类似匿名函数lambda


1. 列表

列表转字典

使用几种方法,zip, enumerate和dict方法
注意,dict方法需要对象都是键值对(不是键值对的会被忽略),且元素0可哈希

p = ['川', '鄂', '赣', '甘', '贵', '黔', '桂', '黑']
index = range(len(p))
print(dict(enumerate(p, 1)))	
print(dict(zip(index, p)))

结果

{1: '川', 2: '鄂', 3: '赣', 4: '甘', 5: '贵', 6: '黔', 7: '桂', 8: '黑', 9: '沪'}
{0: '川', 1: '鄂', 2: '赣', 3: '甘', 4: '贵', 5: '黔', 6: '桂', 7: '黑', 8: '沪'}

一般需要对列表生产索引则使用enumerate打包成键值对
两个列表生产对应的字典则使用zip打包成键值对

如果要初始化值是一样的字典可以使用字典的fromkeys
比如值都初始化为0或空列表

d = ['川', '鄂', '赣', '甘', '贵', '黔', '桂', '黑']
print(dict.fromkeys(d, 0))
print(dict.fromkeys(d, []))

结果

{'川': 0, '鄂': 0, '赣': 0, '甘': 0, '贵': 0, '黔': 0, '桂': 0, '黑': 0}
{'川': [], '鄂': [], '赣': [], '甘': [], '贵': [], '黔': [], '桂': [], '黑': []}

列表常用方法

列表操作包含以下函数:

1、cmp(list1, list2):比较两个列表的元素
2、len(list):列表元素个数
3、max(list):返回列表元素最大值
4、min(list):返回列表元素最小值
5、list(seq):将元组转换为列表

对列表操作包含以下方法:
1、list.append(obj):在列表末尾添加新的对象
2、list.count(obj):统计某个元素在列表中出现的次数
3、list.extend(seq):在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
4、list.index(obj):从列表中找出某个值第一个匹配项的索引位置
5、list.insert(index, obj):将对象插入列表
6、list.pop(obj=list[-1]):移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
7、list.remove(obj):移除列表中某个值的第一个匹配项
8、list.reverse():反向列表中元素
9、list.sort([func]):对原列表进行排序


2.字典

字典常用方法

使用字典最常用的三个方法:keys, values, items
遍历字典实例

provinces = {'川': 1, '鄂': 2, '赣': 3, '甘': 4, '贵': 5, '黔': 6, '桂': 7, '黑': 8}
print(provinces.keys())
print(provinces.values())
for key, value in provinces.items():
    print(key, value, end=" , ")

打印结果

dict_keys(['川', '鄂', '赣', '甘', '贵', '黔', '桂', '黑'])
dict_values([1, 2, 3, 4, 5, 6, 7, 8])
川 1 , 鄂 2 , 赣 3 , 甘 4 , 贵 5 , 黔 6 , 桂 7 , 黑 8 , 

另外还有方法

  1. get(key) # 获取值
  2. pop(key) # 删除值 , popitem() 随机删除一个
  3. update(dict) # 追加字典
  4. clear() # 清空字典
  5. fromkeys() # 返回拥有指定键和值的字典
字典key和value翻转

要翻转前提:值唯一,因为key必须得要可以哈希,列出几种方式:

provinces = {'川': 1, '鄂': 2, '赣': 3, '甘': 4, '贵': 5, '黔': 6, '桂': 7, '黑': 8}
p1 = {v: k for k, v in provinces.items()}
p2 = dict((v, k) for k, v in provinces.items())
p3 = dict(zip(provinces.values(), provinces.keys()))
字典排序

使用方法sort, operator.itemgett或sorted

import operator
p = {'川': 6, '鄂': 8, '赣': 5, '甘': 4, '贵': 3, '黔': 1, '桂': 7, '黑': 2}
print(sorted(p.items(), key=operator.itemgetter(1)))
print(sorted(p.items(), key=lambda x: x[1], reverse=True))

输出

[('黔', 1), ('黑', 2), ('贵', 3), ('甘', 4), ('赣', 5), ('川', 6), ('桂', 7), ('鄂', 8)]
[('鄂', 8), ('桂', 7), ('川', 6), ('赣', 5), ('甘', 4), ('贵', 3), ('黑', 2), ('黔', 1)]

你可能感兴趣的:(python-小知识)