3

我正在尝试尽可能地为输入条件制作最短的代码。
条件:该数字应大于0。
输入:第一个数字确定下一个输入的数量。
例如:

4
1
-2
3
-4

所以我只想附加到 list() 1 和 3。

这是我的代码:

n=int(input())
t=[]
for i in range(n):
    x = int(input())
    if(x>0):
        t.append(x)
print(t)

我想知道它是否可以更短
我有想法,但它没有按我预期的那样工作 - “语法错误”:

n=int(input())
t=[x=int(input()) for x in range(n) if(x)>0)]
print(t)

编辑:忘记了。我正在使用python3.1 ...

4

4 回答 4

6

这是一种方法:

[x for x in (int(input()) for _ in range(int(input()))) if x > 0]
于 2012-05-17T14:09:01.187 回答
0
filter(lambda x: x > 0, (int(input()) for i in range(int(input()))))
于 2012-05-17T14:08:27.017 回答
0

呃……打高尔夫球。:)

您在最短的尝试中放错了括号。您还可以通过使用嵌套列表推导来缩短一点(虽然不多),如下所示:

t = [ x for x in [int(input()) for y in range(input())] if x > 0]
print t

range(input())调用不需要强制转换为int,因为如果range没有传递int.

于 2012-05-17T14:51:42.783 回答
-2
print sum(max(0,input())for _ in range(input()))
于 2015-07-15T19:33:55.323 回答