如果列表中的语句具有多个列表的理解

时间:2017-02-14 00:21:50

标签: python if-statement zip list-comprehension

我有两个相同长度的列表&如果它们的差异小于5,则要从两者中删除值:

SELECT o.order_id
     , o.server
     , o.subtotal
     , o.discount
     , o.tax
     , o.total
     , (SELECT (SUM(o2.total) - SUM(p.total_collected))
            from orders o2 
            JOIN payments p 
              ON o2.order_id = p.order_id
            WHERE o2.order_id = o.order_id) as 'Due'
    FROM orders o
WHERE...;

我想删除,例如第二个&每个使用列表理解的第三个值:

SELECT o.order_id
     , o.server
     , o.subtotal
     , o.discount
     , o.tax
     , o.total
     , o.total - c.Collected AS 'Due'
    FROM orders o
    JOIN (
        SELECT p2.order_id, SUM(p2.total_collected) AS 'Collected'
          FROM payments p2
        GROUP BY p2.order_id) AS c
      ON o.order_id = c.order_id
WHERE...;

然而,每行的'for'部分存在错误(语法无效)。这是由于第一个y&我该怎样阻止这个?

1 个答案:

答案 0 :(得分:0)

你把if放在错误的地方 - 应该在最后;这里是如何获得没有值的列表:

x_mod = [x for x, y in zip(X_List, Y_List) if abs(x-y)>5]
Y_List = [y for x, y in zip(X_List, Y_List) if abs(x-y)>5]

X_List = x_mod

第一个列表不是直接修改的,而是写入temp var。如果是,就像在原始资源中一样,那么第二次理解就必须使用已经修改的X_List,并且不会产生所需的结果。

我也使用了两个值的绝对差值b / n,因为你已经说过两者之间的差异应该大于5,不是Y_List的成员应该大于5。