使用列表推导对列表中的奇数求和,对于和如果在一行中

时间:2017-01-17 12:43:57

标签: python if-statement for-loop sum list-comprehension

我正在学习Python,我正在尝试一些练习。我试图使用列表推导将所有奇数从0到9加起来,对于和如果在一行中。

我尝试了以下代码:

for idx in range(10): s = 0 if idx == 0 else s = [(i % 2) for i in range(10)][idx] * range(10)[idx] + s

但是我收到以下错误:

SyntaxError: can't assign to conditional expression

我不太明白。

您的建议将不胜感激。

6 个答案:

答案 0 :(得分:6)

非常简短的oneliner:

sum(range(1,10,2))

但实际公式适用于任何n

((n+1)//2)**2

有了这个,你就可以很快地计算出一个非常大的n的总和。

回到这一点,你不能使用列表理解来积累,或者这很难/ hacky,所以这里需要sum。因此,最合乎逻辑的要求是“使用理解符号和if”是:

sum(x for x in range(1,10) if x % 2)

请注意,在这种情况下无需额外添加[]。这是生成器理解(避免生成额外的listsum不需要一次获取所有信息。

答案 1 :(得分:3)

这就是你可以这样做的方式

sum([x for x in range(1,10,2)])

解释代码失败的原因

以下是问题中给出的代码

for idx in range(10):
    s = 0 if idx == 0 else ([(i % 2) for i in range(10)][idx] * range(10)[idx] + s)

else部分中,您可以将值赋予s,即s=不是必需的。您可以将其重写为

for idx in range(10):
    s = 0 if idx == 0 else ([(i % 2) for i in range(10)][idx] * range(10)[idx] + s)

python中三元运算符的表达式语法如下

condition_is_true if condition else condition_is_false

例如用法

value1 = 10
value2 = 20
a = 3
b = 4
value = value1 if a > b else value2
print value
#20

答案 2 :(得分:2)

你可以试试这个:

sum([x for x in range(10) if x % 2 != 0])

首先使用range创建一个从0到9的数字列表,然后创建奇数的列表(列表推导)(使用if x % 2)。最后,使用sum对数组的内容求和。

答案 3 :(得分:1)

你可以将它减少一行

reduce(lambda x,y: x+y if y%2 != 0 else x ,range(10))

输出

  

25

答案 4 :(得分:0)

你可以这样做..

a = range(0,10)
b = sum([x for x in a if x%2 != 0])
print b

输出:

25

答案 5 :(得分:0)

numbers = range(0, 10)

def addOddNumbers(numbers):
    for num in numbers:
        if num % 2 == 1:
            return sum
        print sum(numbers)

if __name__ == '__main__':
    addOddNumbers(numbers)