python 字典列表元组生成器的使用

Posted 算命的说我是

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 字典列表元组生成器的使用相关的知识,希望对你有一定的参考价值。

python的生成式在一些类型相互转换的时候可以写出十分优雅的代码。如列表转换成另一个列表、字典、或元组。并且代码的执行效率也比使用for...in...循环高。

列表生成式

列表生成式即生成列表的生成式,写法简单而优雅,可以将多行代码融合成一行。主要的作用是将其他对象转换成列表或对原来的列表进行过滤。

# 列表转换列表
ls = [1,2,4,6]
ls1 = [x**2 for x in ls]
print(ls1)
结果:[1,4,16,36]

# 对列表过滤,返回true的才会保留到列表
ls = [1,2,4,6]
ls1 = [x**2 for x in ls if x > 3]
print(ls1)
结果:[16, 36]

# 多条件过滤
ls = [1,2,4,6]
ls1 = [x**2 if x > 2 else x**3 for x in ls]
print(ls1)
结果:[1, 8, 16, 36]

# 多重循环
ls = [1,2,4,6]
ls1 = [x**y if x > 2 else x**3 for x in ls for y in ls]
print(ls1)
结果:[1, 1, 1, 1, 8, 8, 8, 8, 4, 16, 256, 4096, 6, 36, 1296, 46656]

 

生成器生成式

  • 在涉及到需要遍历列表而不是针对列表的某个值操作时,使用生成器代替列表可以减少内存的消耗。
ls = [1,2,4,6]
ls1 = (x**2 for x in ls)
print(ls1)
结果:<generator object <genexpr> at 0x0000021B21DED150>

# 通过for..in取数据不需要处理StopIteration
for i in ls1:
    pass

# next()方法需要处理StopIteration
while True:
    try:
        print(next(ls1))
    except StopIteration:
        pass

 

字典生成式

字典生成式在一些需要列表或元组转化成字典的场合可以写出很优雅的代码。

# dict()可以接受类似列表生成式的写法,前提是ls至少是二维可迭代对象,否则报错
ls = [(name1,xiao),(name2,wang)]
dict_ls = dict(x for x in ls)
print(dict_ls)
结果:{name1: xiao, name2: wang}

 

元组生成式

由于()这个类似列表生成式的形式被生成器占用了,所有元组生成式使用tuple()来进行。

ls = [(name1,[1,2]),(name2,wang)]
dict_ls = tuple(x for x in ls)
print(dict_ls)
结果:((name1, [1, 2]), (name2, wang))

 

 

以上是关于python 字典列表元组生成器的使用的主要内容,如果未能解决你的问题,请参考以下文章

Python 元组tuple 列表list 字典dict集合set迭代器生成器

python 列表生成元组字典

更深层次理解Python的 列表元组字典集合(工作面试学习必需掌握的知识点)

python数据类型—列表元组字典

Python列表元组集合字典的区别和相互转换

python列表,元组,字典,集合的比较总结