可以在python的单行生成器中使用三元吗?

时间:2019-04-30 14:35:06

标签: python

我有一个必须解析的csv数据集,其中缺少一些数据。 因此,我正在寻找一种将其替换为零的方法。

到目前为止,我要做的是正确解析文件并避免丢失数据,这使得解析在遇到的第一个错误数据时停止,并忽略下一个错误的数据,即使它们是正确的。

[(year, population) for year, population in zip(years, parsed) if population != '']

我试图添加一个else语句,该语句将导致三进制,但是会引发语法错误,

Years是字段列表,而Parsed是我想压缩在一起以获得元组列表的已解析数据。

是否有任何方法可以使用类似的语法替换此数据,而无需使用诸如csvreader这样的专用库(我正在学习,我不希望在不了解其工作原理的情况下完成所有工作)?

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

您应该从头开始,以支持其他方面:

[(year, population) if population != '' else [Something] for year, population in zip(years, parsed)]

答案 1 :(得分:0)

我不确定我是否正确理解“解析停止...忽略下一个解析”的含义,因为这不是理解中的if条件的工作原理。这是一个跳过不正确值的过滤器,而不是停止条件。例如,[x for x in range(5) if x % 2]将返回[1, 3],跳过偶数。

但是,您也可以在理解内使用三元表达式。必须采用[expr1 if cond1 else expr1 for ... in ...]之前的for形式。