Python 2.7.5 列表解析各层循环变量传递问题

我有3个html文件路径的列表,例如:htmls=["1.html","2.html","3.html",]现在我要用列表解析的方式逐文件逐行地把行数据集中在列表res中... 我有3个html文件路径的列表,
例如:htmls=["1.html","2.html","3.html",]
现在我要用列表解析的方式逐文件逐行地把行数据集中在列表res中:
res=[eachline for eachline in open(eachhtml) for eachhtml in htmls]

结果里层for循环的open(eachhtml)无法读取外层for循环的eachhtml,报错:
Traceback (most recent call last):
File "C:\Users\Administrator.PC-20120204YYJR\Desktop\studio\python\pyfiles\battleAnalyze_lisCom.py", line 187, in <module>
rawl=[eachline for eachline in open(eachhtml) for eachhtml in htmls]
NameError: name 'eachhtml' is not defined

奇怪的是,实际上在这种列表解析完成后,已经在全局作用域注册了i,j,下例可以证明:
>>> [(i,j) for j in range(2) for i in range(3)]
[(0, 0), (1, 0), (2, 0), (0, 1), (1, 1), (2, 1)]
>>> i,j
(2, 1)

我不想用那么多次append函数啊...有办法解决这个问题吗?我就是要用列表解析一行写完整个过程啊啊啊
我是单人开发啊,程序可读性是浮云啊,我要性能啊啊啊
展开
 我来答
bdwisyou7d
2013-09-25 · TA获得超过1.3万个赞
知道大有可为答主
回答量:3774
采纳率:81%
帮助的人:1087万
展开全部

只有一次append啊。如果要性能用blist,循环语句本身不是性能的瓶颈,第一是文件IO,第二是append。 如果用blist可以减少append的性能损失。文件IO,可以一次性readlines,速度会快很多。


from blist import blist
blines=blist()
for eachhtml in htmls:
     tmplines=open(eachhtml).readlines()
     for eachline in tmplines:
          blines.append(eachline
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Robeanithe
2013-09-25 · TA获得超过172个赞
知道答主
回答量:33
采纳率:0%
帮助的人:41.4万
展开全部
我用你的代码测了下, 没有问题。
但是我觉得,既然使用python, 就不要在 一些小地方 节约性能了。
也许你以后还有维护这段代码呢。可读性不是浮云哦
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
daweileo
2013-09-25 · TA获得超过275个赞
知道小有建树答主
回答量:121
采纳率:100%
帮助的人:160万
展开全部
搞反了,左边的相当于是外层循环
res=[eachline for eachhtml in htmls for eachline in open(eachhtml) ]
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式