#python #python-3.x
#питон #python-3.x #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])
Кто-нибудь может объяснить последнюю строку?
Я предполагаю, что он использует понимание списка, но как? Если мое предположение неверно, то не могли бы вы, пожалуйста, описать, что именно было использовано, с какой-нибудь ссылкой или, может быть, синтаксисом для этого?
Ответ №1:
Нет, это не понимание списка. Он создает список из 2 элементов, а затем использует преимущества True==1
и False==0
для индексации в списке.
Более питонический способ сделать это был бы:
print(j-i,(n*(n-1))//2 if i==j else a.count(i)*a.count(j))
Ответ №2:
Марк попал прямо в точку. Его ответ более питонический.
Просто для дальнейшего использования. Всякий раз, когда я не могу прочитать строку сразу, я пытаюсь переписать ее в лучшем формате, возможно, добавив новые строки и отступы.
print(
j-i,
[ (n*(n-1))//2,
a.count(i)*a.count(j) ][i!=j]
)
Ответ №3:
Чтобы упростить задачу, я удаляю 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])
print(j-i,[10,1][i!=j])
тогда мы имеем:
k = j-i = 4
l = [10,1][i!=j] = 1
print(k,l)
Это дает:
>>> print(4,1)
(4, 1)