在python中,我们经常用列表,字典等数据类型进行数据存储或者重新构造一个序列,同时它们之间也有着一些关联关系,接下来我们就对python中常用的几种数据类型进行一个整体性的梳理。
相同点
不同点
从左到右,可以试图找一些规律 。
以上不同的数据类型,也可以实现两者之间的相互转化,转化时只需要通过调用对应函数即可,如下图
下图是每种数据类型间的相互转化及具体实例。
通过以上的表格可以看出,数据类型可以进行相互转化,总结有以下几点:
转化为字典时必须要求是两个元素组合成一个元组才能进行转化 。那为了简便我们可以使用zip()将两个序列组成一个新的字典更加方便。
#?通过zip将两个列表合并为一个序列,然后再转化为字典。?lst1?=?['x','y','z']????????????#可以是一个列表,元组,集合?lst2?=?[123,234,345]?????????????print(dict(zip(lst1,lst2)))??????????#输出:?{'x':?345,?'y':?234,?'z':?123}?
通过str()进行转化后的数据虽然变成了字符串,但是我们更想的是把序列中的元素结合起来变为字符串 。那么可以通过join()方法将其内的元素变为想要的字符串。
#语法:?????"sep".join(seq)??#实例:?????x?=?"".join({'a':123,'b':345})?????print("x:",x)?????y?=?",".join(['java','python','c++'])?????print("y:",y)?????z?=?"_".join(("tuple","demo","01"))?#输出:?????x:?ab?????y:?java,python,c++?????z:?tuple_demo_01?#说明:?????sep为分隔符,seq序列?
在以上的数据结构中,部分数据类型同样支持推导式,推导式是可以将一个可迭代对象构建成新的可迭代对象的表达式结构体 。通过推导式可以快速实现出一个新的序列或生成器 ,也可以让代码更加优雅和快捷 。
为了更加直观,我们可以一张图来总结不同数据类型所支持的推导式。我们只需要记住推导式的433.
字典推导式
#语法:?????{<operation_key:operation_value>?for?key,value?in?dict?condition?}?#实例:?????d?=?{'chinese':?88,?'math':?92,?'english':?93,?'history':?84}?????print("成绩大于90分的科目:",?{k:?'优秀'?for?k,?v?in?d.items()?if?v?>=?90})?#输出?????成绩大于90分的科目:?{'math':?'优秀',?'english':?'优秀'}?#说明:?????for循环后的表达式可以是条件表达式或者循环表达式,主要是进行筛选或嵌套循环?????返回结果是一个根据表达式运算后生成出来的新字典?。?
集合推导式:
#语法:?????{<operation_key:x>?for?x?in?set?condition?}?#实例?????s?=?{x**2?for?x?in?[1,?2,?3]}?????print("集合s:",s)?#输出:??????集合s:?{1,?4,?9}?
列表推导式
#语法:?????[?operation(x)?for?x?in?list?condition?]?#实例?????print([random.randint(1,10)+x?for?x?in?range(0,10)?if?x?%?2?==?0])?#结果:?????[3,?3,?14,?15,?12]?#说明:?????#对列表推导式常使用的几种用法?????用法1:[x?for?x?in?iterable?]??????????????????#循环后直接打印?????用法2:[x?for?x?in?iterable?if?condition(x)?]??#对x的条件判断?????用法3:[operation(x)?for?x?iterable?if?condition(x)]??#对x条件判断后,再对x进行运算?????用法4:?[operation(x,y)?for?x?in?iterable?for?y?in?iterable1]?#嵌套循环,对x,y进行运算?
生成器推导式
#语法:?????(?operation(x)?for?x?in?iterable?condition?)?#实例?????print((random.randint(1,10)+x?for?x?in?range(0,10)?if?x?%?2?==?0))?#结果:?????<generator?object?<genexpr>?at?0x02FDC420>?#说明:?????新生成的生成器可以使用for循环,也可以next()获取其下一个值?
以上数据结构除了可以作为容器使用,也可以它们结合起来使用,以用作其它用途 。比如可以用作条件语句。为了直观,我们先写一个简单的if语句。
score?=?92?if?score?>=?90:?????print('优秀')?else:?????print('良好')?#输出:优秀?
接下来,我们就通过以下这三种方式来重新定义条件语句。
第一种,使用()+[]来实现条件判断
#语法:?????(<return_false>,?<return_true>)[condition_expression]?#实例:?????score?=?92?????print(('良好','优秀')[?score?>=?90?])?#结果:?????优秀?#说明:?????在[]中写条件语句,在()中写返回为真和返回为假的值。一定要注意顺序,()在前,[]在后?
第二种,使用{}+[]来实现条件判断
#语法:?????{True:?<return_true>,?False:?<return_false>}[<condition_expression>]?#实例:?????score?=?92?????print({True:'优秀',False:'良好'}[?score?>=?90?])?#结果:?????优秀?#说明:?????在[]中写条件语句,在()中写返回为真和返回为假的值,一定要注意顺序?
第三种,对字符串进行条件判断 ,需要用到eval方法。
#语法:?????eval("字符串判断语句")?#实例?????print('优秀'?if?eval("score?>=?90")?else?'良好')?#结果?????优秀?
领取专属 10元无门槛券
私享最新 技术干货