jsm*_*iao 3 python list-comprehension strip scrapy
我正在使用 Scrapy 库。我经常得到带有“\t”和“\n”的列表。
我试图使用列表理解来剥离和删除生成的空元素,但最终仍然是空元素。
有人可以解释一下解释器是如何处理代码的吗?它似乎正在检查空元素,然后剥离元素并将其重新插入列表中。
先感谢您!
# input
char_list = ['', ' a','b', '\t']
print char_list
char_list = [x.strip() for x in char_list if x!='']
print char_list
# output
['', ' a', 'b', '\t']
['a', 'b', '']
#DESIRED output
['', ' a', 'b', '\t']
['a', 'b']
Run Code Online (Sandbox Code Playgroud)
通常在这种情况下,我会将其更改为两个步骤...在第一步中,我进行可能昂贵的处理。在第二步中,我进行过滤。第一步可以使用生成器表达式来完成,以避免不必要的列表:
char_list_stripped = (x.strip() for x in char_list)
char_list = [x for x in char_list_stripped if x]
Run Code Online (Sandbox Code Playgroud)
在这种情况下,它可以让您不必调用x.strip实际需要次数的两倍(如果您将其全部打包到一个推导式中)。这可能并不算巨大的节省(您可能不会注意到速度差异)。但在更一般的情况下,它可能会产生显着的差异,具体取决于处理实际需要多少工作。