列表理解中的递增数字

increment numbers in list comprehension

我是 python 的新手。我正在学习列表理解以将我的代码缩短到最少。但是我无法在列表理解中增加。喜欢这个代码:

n = 0; c = 0
for i in range(input()):
   m = map(int,raw_input().split())
   [n+=1 if m[0] > m[1] else c+=1]
print ['N', 'C'][c > n]

我的输入:

3
3 4
2 4
2 5

输出应该是:

N

列表理解用于制作列表。你似乎想要

if m[0] > m[1]: n+=1 
else: c+=1

这没有解决代码中的其他错误。

您实际上不需要同时跟踪 nc,因为您可以从另一个和总数(您的第一个输入)中计算出一个。

t = input()
n = 0
for i in range(t):
   a, b = map(int, raw_input().split())
   n += (a > b)
print 'N' if n >= t/2 else 'C'

如果你真的想缩短它(注意:除了 Code Golf,更短并不总是意味着更好)你可以尝试这样的事情:

t = input()
n = sum(1 for i in range(t) for a, b in [map(int, raw_input().split())] if a > b)
print 'N' if n >= t/2 else 'C'

或不使用 t,使用 cmp(在 Python 3 中退休)将 +1 计算为 a > b,将 -1 计算为 a < b,然后与 0 进行比较。但这将以不同的方式处理 a == b 的情况,并且可读性最终会下降。

n = sum(cmp(*map(int, raw_input().split())) for _ in range(input()))
print 'N' if n >= 0 else 'C'

以上代码存在多个问题-

  • 我们不会将 input() 转换为 int
  • 我们同时使用 input()raw_input()
  • 列表理解不允许 += 运算符