首页 > 代码库 > 每天学点Python之comprehensions

每天学点Python之comprehensions

每天学点Python之comprehensions


推导式能够简化对数据的处理,让代码简洁的同一时候还具有非常高的可读性。这在Python中非经常见。

列表推导式

通过列表推导式能够对列表中的全部元素都进行统一的操作来获得一个全新的列表(原列表不发生变化),形式如[处理方式 for 元素 in 列表],当中的处理方式能够是不论什么操作:

>>> a=[1,2,3,4]
>>> [i*2 for i in a]
[2, 4, 6, 8]
>>> a
[1, 2, 3, 4]
>>> [(i*2,i+10) for i in a]
[(2, 11), (4, 12), (6, 13), (8, 14)]

能够通过加上if语句来过滤掉原列表中的一些元素:

>>> a=[1,2,3,4]
>>> [i*2 for i in a if i>2]
[6, 8]

字典推导式

我们能够通过推导式来创建一个字典,只是字典推导式的括号是花括号:

>>> a
[1, 2, 3, 4]
>>> { "str"+str(i):i for i in a }
{‘str3‘: 3, ‘str1‘: 1, ‘str4‘: 4, ‘str2‘: 2}

运用字典推导式有一个妙用,就是能够调换键和值的位置:

>>> a={‘one‘:1,"two":2,"three":3}
>>> {value:key for key,value in a.items()}
{1: ‘one‘, 2: ‘two‘, 3: ‘three‘}

注:确保值也是不可变类型,比如字符串、元组等

集合推导式

集合推导式与字典推导式相似。只是仅仅有一个值而不是键值对:

>>> a={1,2,3,4,5}
>>> {i**2 for i in a if i%2==1}
{1, 9, 25}
<script type="text/javascript"> $(function () { $(‘pre.prettyprint code‘).each(function () { var lines = $(this).text().split(‘\n‘).length; var $numbering = $(‘
    ‘).addClass(‘pre-numbering‘).hide(); $(this).addClass(‘has-numbering‘).parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($(‘
  • ‘).text(i)); }; $numbering.fadeIn(1700); }); }); </script>

每天学点Python之comprehensions