在Python中使用DropWhile进行练习,并且遇到了麻烦。
例如,如果这是文件中的行:
Test1
Test2
Test3
Test4
Test5
Test6
Test7
Test8
Test9
Test10
我想拉出Test5和Test8之间的界限。
我知道如何以另一种方式做到这一点(对于文件中的行...获取行的最后一行...如果行> 5 ....如果行< 8 ... print);但我特别想练习使用DropWhile。
我尝试了几种不同的方式,但我似乎无法让它起作用:
e.g。
dataset = open(sys.argv[1]).readlines()
def print_out(line):
if int(line.strip()[-1]) > 5:
if int(line.strip()[-1]) < 8:
return True
else:
return False
for line in dropwhile(lambda line: print_out(line) == True, dataset):
print line.strip()
这不起作用,所有行都打印出来。
另一种方法我尝试在dropwhile行中使用long lambda表达式而不是使用单独的函数,但是当我做了类似这样的事情时:
for line in dropwhile(lambda line: 5 < int(line.strip()[-1]) < 8, dataset):
如果我只有一个表达式(即int(line.strip()[ - 1])&gt; 5或int(line.strip()[ - 1])&lt; 8,但不是两者都有,则此代码有效
我想知道是否有人可以使用DropWhile向我展示pythonic方式,在我的测试数据集中拉出Test5和Test8之间的界限?
答案 0 :(得分:2)
DropWhile
不是您所需要的,从功能方面您必须使用过滤器:
filter(lambda line: 5 < int(line.strip()[-1]) < 8, dataset)
DropWhile会在条件达到一次后停止,因此一旦达到Test6
答案 1 :(得分:0)
如果您打算在数据集上使用ftp.exe
,那么您还需要使用dropwhile()
来获取所需的行,如下所示:
takewhile()
这会给你:
from itertools import takewhile, dropwhile
for line in takewhile(lambda x: int(x.strip()[-1]) < 8, dropwhile(lambda x: int(x.strip()[-1]) <= 5, dataset)):
print line.strip()
所以它分两步完成,首先将每一行丢弃到所需的起点,然后只取线直到所需的终点,此时它就完成了。