【问题标题】:Shortest code for input输入的最短代码
【发布时间】:2012-05-25 02:52:02
【问题描述】:

我正在尝试尽可能为带条件的输入制作最短的代码。
条件:数字应该大于 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...

【问题讨论】:

  • 这个作业,x=int(input()),不能在列表理解中进行。
  • OT:参与codegolf.com? :)
  • if 语句中的额外括号是线路噪音。有关首选格式,请参阅 PEP 8
  • @Pavel 我认为要在 codegolf 中获胜,你有合同义务使用 perl ;)
  • @Steven:很好。对于一个邪恶的变种来说这个怎么样......@ 987654328@。或者只是filter(range,map(input,['']*input())),字符数相同,不需要多条语句。

标签: python optimization input python-3.x


【解决方案1】:
print sum(max(0,input())for _ in range(input()))

【讨论】:

  • 你能解释一下你的答案吗?
【解决方案2】:
filter(lambda x: x > 0, (int(input()) for i in range(int(input()))))

【讨论】:

  • input 在 Python 3 中返回一个字符串,这就是他在回答中使用它的方式。他还使用 print 作为函数,这是他使用 Python 3 的另一个线索。
  • 触摸。应该更仔细地观察一下代码。
【解决方案3】:

呃……打高尔夫球。 :)

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

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

range(input()) 调用不需要转换为int,因为如果range 没有传递int,它无论如何都会出错。

【讨论】:

  • 请注意,对于不需要的参数(通常在范围循环中)使用_ 是惯例。除了必须考虑其他名称之外,这还避免了 IDE 抱怨未使用的参数。此外,在内部循环中使用迭代器而不是列表应该更快 - 或者至少内存效率更高。
  • 在 Python 3 中,input 总是返回一个字符串,所以range(input()) 将在所有输入中失败。
【解决方案4】:

这是一种方法:

[x for x in (int(input()) for _ in range(int(input()))) if x > 0]

【讨论】:

  • 他使用input返回一个字符串,并将其转换为整数,因此他使用的是Python 3。您需要转换input的结果。
  • @StevenRumbalski 哦,没看到那个固定的。
  • 是的,嵌套列表推导很棒,尽管在使用它们时必须小心——我查看了我在“发现”该功能后编写的一些代码......好吧,它不一定会提高可读性。我会说这仍然可以。
  • 你仍然忘记给int打个电话,但还是+1。
猜你喜欢
  • 1970-01-01
  • 2010-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-04
  • 1970-01-01
相关资源
最近更新 更多