无法理解此代码的最后一部分

2024-04-28 06:14:01 发布

您现在位置:Python中文网/ 问答频道 /正文

n=int(input())
a=list(map(int,input().split()))
i,j=min(a),max(a)
print(j-i,[(n*(n-1))//2,a.count(i)*a.count(j)][i!=j])

有人能解释最后一行吗? 我猜它使用列表理解,但是如何使用呢?如果我的猜测是错误的,那么你能描述一下一个人到底用了什么,并提供一些参考资料或者语法吗


Tags: map列表inputcount错误语法minmax
3条回答

马克说得对。他的回答更像Python

仅供将来参考。每当我不能马上读一行时,我就会尝试用更好的格式重写它,也许会添加新行和缩进

print(
    j-i,
    [  (n*(n-1))//2,
       a.count(i)*a.count(j)  ][i!=j]
)

为了方便起见,我删除了input()。将其替换为“5”和“1 2 3 4 5”

我想你理解这一部分

n=int("5") # n = 5
a=list(map(int,"1 2 3 4 5".split()))  # a=[1, 2, 3, 4, 5]
i,j=min(a),max(a)   # (i, j) = (1,5)

现在我们有了 n=5;a=[1,2,3,4,5];i=1;j=5

然后我们可以从[(n*(n-1))//2,a.count(i)*a.count(j)]开始:

x = (n*(n-1))//2 = 10
y = a.count(i)*a.count(j) = 1
[(n*(n-1))//2 ,a.count(i)*a.count(j)] = [x,y] = [10,1]

现在我们把它放入:print(j-i,[(n*(n-1))//2,a.count(i)*a.count(j)][i!=j]) 打印(j-i[10,1][i!=j]) 然后我们有:

k = j-i = 4
l = [10,1][i!=j] = 1

print(k,l)

这使得:

>>> print(4,1)
(4, 1)

不,不是。它构建一个2元素列表,然后利用True==1False==0索引到列表中

一种更具Python风格的方法是:

print(j-i,(n*(n-1))//2 if i==j else a.count(i)*a.count(j))

相关问题 更多 >