为什么其他情况在这种情况下不起作用

时间:2018-09-19 04:49:26

标签: python python-3.x

对于一项作业,我需要做以下两个练习:

  1. 创建一个列表,其中包括将每个数字从1到9(包括)乘以100,只要该数字除以2且没有余数。

  2. 创建一个列表,其中包括将每个数字从1到9(包括)乘以100,仅当该数字除以2且没有余数时。如果存在余数,则将数字保持原样,请勿乘以100。

答案1有效:

list_1 = [num * 100 for (num) in range(1,10) if num % 2 == 0]

print (list_1)

但是练习2的答案为什么不起作用?:

list_1 = [num * 100 for (num) in range(1,10) if num % 2 == 0 else num]

print (list_1)

4 个答案:

答案 0 :(得分:2)

可以的;

In [1]: [x * 100 if x % 2 == 0 else x for x in range(1, 10)]
Out[1]: [1, 200, 3, 400, 5, 600, 7, 800, 9]

答案 1 :(得分:2)

这样写:

list_1 = [num * 100 if num % 2 == 0 else num for num in range(1,10)]

答案 2 :(得分:2)

您可以执行以下操作:

list_1 = [(num * 100  if num % 2 == 0 else num) for (num) in range(1,10)]

哪个语句评估x if y else z作为每个列表元素的输出。 希望这会有所帮助:)

答案 3 :(得分:2)

您的交替切换到处都是。

[x for x in xs if some_predicate else y]

解析为

[(x for x in xs) if some_predicate else (y)]  # which makes no sense

不是

[(x) for x in xs if some_predicate else (y)]

但是你可以做

[x if some_predicate else y for x in xs]