Python - 使用模数的列表推导中的意外输出

时间:2017-06-30 01:49:53

标签: python list-comprehension modulus

为什么filtered_lst_2具有与filtered_lst_1不同的值,尽管它们具有相同的逻辑?我一定错过了一些明显的东西。谢谢!

lst = [x ** 3 for x in range(1, 11)]
print(lst) # [1, 8, 27, 64, 125, 216, 343, 512, 729, 1000]

filtered_lst_1 = []
  for x in lst:
    if x % 4 == 0:
      filtered_lst_1.append(x)
print(filtered_lst_1) # [8, 64, 216, 512, 1000]

filtered_lst_2 = ([x ** 3 for x in range(1, 11) if x % 4 == 0])
print(filtered_lst_2) # [64, 512]

3 个答案:

答案 0 :(得分:3)

不同之处在于您正在进行操作的顺序。在第一个中,你首先是立方体,然后是模数。在第二个中,你在> 之前采用模数

使第二个输出等于第一个输出:

filtered_lst_2 = ([x ** 3 for x in range(1, 11) if x ** 3 % 4 == 0])

答案 1 :(得分:1)

您可以试试filtered_lst_2 = ([x ** 3 for x in range(1, 11) if (x ** 3) % 4 == 0])

答案 2 :(得分:1)

实际上,第一个答案是有道理的。