Python 列表解析
2017-04-06 12:59
190 查看
列表解析
在一个序列的值上应用一个任意表达式,将其结果收集到一个新的列表中并返回。它的基本形式是一个方括号里面包含一个for语句对一个iterable对象迭代
[python]
view plain
copy
>>> res=[ord(x) for x in 'spam']
>>> res
[115, 112, 97, 109]
>>> [x**2 for x in range(10)]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
增加测试语句和嵌套循环
[expression for target1 in iterable1 [if condition1]...
for targetn in iterablen [if conditionn] ]
上面是列表解析中,任意数量嵌套的for循环同时关联可选的if 测试,其中if 表示测试语句是可选的,如果没有的话,就是我们上面的例子,注意for上下之间表示的是一个嵌套关系。
第一个是表达式,比较形式[(x,y), [0,2,4],[1,3]]与下面形式的区别
[python]
view plain
copy
>>> [(x,y) for x in range(5) if x % 2==0 for y in range(5) if y % 2 ==1]
[(0, 1), (0, 3), (2, 1), (2, 3), (4, 1), (4, 3)]
map,lambda,filter的组合同样会达到一个进行测试的效果,但是如何实现嵌套我现在不太清楚
[python]
view plain
copy
>>> list(map((lambda x:x**2),filter((lambda x:x%2==0),range(10))))
[0, 4, 16, 36, 64]
我也试着写了一下如何等价与上面的嵌套,但是失败了,因为map的逻辑是每次都从后面序列中取出一个,以最少的为标准。如何实现x固定,遍历y呢?
[python]
view plain
copy
>>> list(map((lambda x,y:(x,y)),filter((lambda x:x%2==0),range(5)),filter((lambda y:y%2==1),range(5))))
[(0, 0), (2, 2), (4, 4)]
>>> list(map((lambda x,y:(x,y)),filter((lambda x:x%2==0),range(5)),filter((lambda y:y%2==1),range(5))))
[(0, 1), (2, 3)]
列表解析和矩阵
如何生成矩阵?见Python 生成矩阵
[python]
view plain
copy
>>> rect
[[1, 2, 3], [3, 4, 5]]
>>> [row[1] for row in rect] #访问指定列中的元数
[2, 4]
>>> rect[1] #访问指定行的元素
[3, 4, 5]
>>> [rect[row][1] for row in range(2)] #访问指定位置元数
[2, 4]
列表解析
map和列表解析是在解释器中以C语言的速度来运行,比Python的for循环代码在pvm中运行要快的多。
[python]
view plain
copy
>>> open("tut1.m").readlines()
['aaa\n', 'bbb\n', 'ccc\n']
>>> [line.rstrip() for line in open("tut1.m").readlines()] #消除文件中的换行
['aaa', 'bbb', 'ccc']
>>> [line.rstrip() for line in open("tut1.m")]
['aaa', 'bbb', 'ccc']
>>> list(map((lambda line: line.rstrip()), open("tut1.m")))
['aaa', 'bbb', 'ccc']
第一种方式:因为readlines()方法,把整个文件都放入到内存中。然后对string进行解析
第二种方式:使用了文件迭代器,进行列表解析。
第三种方式:Map同样使用了文件迭代器,但是它不是列表解析,因为它两边不是[]引起来的。
上面二,三方式使用了迭代器,都不会一次性构建列表,所以节省了内存空间。
在一个序列的值上应用一个任意表达式,将其结果收集到一个新的列表中并返回。它的基本形式是一个方括号里面包含一个for语句对一个iterable对象迭代
[python]
view plain
copy
>>> res=[ord(x) for x in 'spam']
>>> res
[115, 112, 97, 109]
>>> [x**2 for x in range(10)]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
增加测试语句和嵌套循环
[expression for target1 in iterable1 [if condition1]...
for targetn in iterablen [if conditionn] ]
上面是列表解析中,任意数量嵌套的for循环同时关联可选的if 测试,其中if 表示测试语句是可选的,如果没有的话,就是我们上面的例子,注意for上下之间表示的是一个嵌套关系。
第一个是表达式,比较形式[(x,y), [0,2,4],[1,3]]与下面形式的区别
[python]
view plain
copy
>>> [(x,y) for x in range(5) if x % 2==0 for y in range(5) if y % 2 ==1]
[(0, 1), (0, 3), (2, 1), (2, 3), (4, 1), (4, 3)]
map,lambda,filter的组合同样会达到一个进行测试的效果,但是如何实现嵌套我现在不太清楚
[python]
view plain
copy
>>> list(map((lambda x:x**2),filter((lambda x:x%2==0),range(10))))
[0, 4, 16, 36, 64]
我也试着写了一下如何等价与上面的嵌套,但是失败了,因为map的逻辑是每次都从后面序列中取出一个,以最少的为标准。如何实现x固定,遍历y呢?
[python]
view plain
copy
>>> list(map((lambda x,y:(x,y)),filter((lambda x:x%2==0),range(5)),filter((lambda y:y%2==1),range(5))))
[(0, 0), (2, 2), (4, 4)]
>>> list(map((lambda x,y:(x,y)),filter((lambda x:x%2==0),range(5)),filter((lambda y:y%2==1),range(5))))
[(0, 1), (2, 3)]
列表解析和矩阵
如何生成矩阵?见Python 生成矩阵
[python]
view plain
copy
>>> rect
[[1, 2, 3], [3, 4, 5]]
>>> [row[1] for row in rect] #访问指定列中的元数
[2, 4]
>>> rect[1] #访问指定行的元素
[3, 4, 5]
>>> [rect[row][1] for row in range(2)] #访问指定位置元数
[2, 4]
列表解析
map和列表解析是在解释器中以C语言的速度来运行,比Python的for循环代码在pvm中运行要快的多。
[python]
view plain
copy
>>> open("tut1.m").readlines()
['aaa\n', 'bbb\n', 'ccc\n']
>>> [line.rstrip() for line in open("tut1.m").readlines()] #消除文件中的换行
['aaa', 'bbb', 'ccc']
>>> [line.rstrip() for line in open("tut1.m")]
['aaa', 'bbb', 'ccc']
>>> list(map((lambda line: line.rstrip()), open("tut1.m")))
['aaa', 'bbb', 'ccc']
第一种方式:因为readlines()方法,把整个文件都放入到内存中。然后对string进行解析
第二种方式:使用了文件迭代器,进行列表解析。
第三种方式:Map同样使用了文件迭代器,但是它不是列表解析,因为它两边不是[]引起来的。
上面二,三方式使用了迭代器,都不会一次性构建列表,所以节省了内存空间。
相关文章推荐
- 使用python的列表解析以及函数式计算来简化代码
- Python 列表解析和生成器表达式
- [Python入门及进阶笔记]Python-基础-列表及列表解析小结
- devi into python 笔记(二)元组 变量声明 和列表解析
- Python之道–列表解析和生成器
- python整理十——生成器表达式与列表解析
- python的列表解析
- python 中的列表解析和生成表达式
- 【转】python 中的列表解析和生成表达式
- [Python入门及进阶笔记]Python-基础-列表及列表解析小结
- python 中的列表解析和生成表达式
- Learning Python:1. 生成器函数、列表解析与map,for循环的效率对比
- python列表解析不写for循环do something
- python 列表解析
- Python 生成器函数,生成器表达式,迭代器,列表解析
- Python里有趣的列表解析和生成器表达式
- python 列表解析
- python中迭代器、列表解析、生成器的分析比较
- [Python入门及进阶笔记]Python-基础-列表及列表解析小结
- Python 生成器与列表解析