列表理解中的递增数字
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
这没有解决代码中的其他错误。
您实际上不需要同时跟踪 n
和 c
,因为您可以从另一个和总数(您的第一个输入)中计算出一个。
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()
- 列表理解不允许 += 运算符
我是 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
这没有解决代码中的其他错误。
您实际上不需要同时跟踪 n
和 c
,因为您可以从另一个和总数(您的第一个输入)中计算出一个。
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()
- 列表理解不允许 += 运算符