我正在学习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
我不太明白。
您的建议将不胜感激。
答案 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)
请注意,在这种情况下无需额外添加[]
。这是生成器理解(避免生成额外的list
,sum
不需要一次获取所有信息。
答案 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)