查找亚军得分>>解释

时间:2018-09-14 06:15:19

标签: python

  

给出您在大学运动日的参与者得分表,   您需要找到亚军得分。您会得到分数。   将它们存储在列表中,并找到亚军的得分。

     

输入格式

     

第一行包含N。第二行包含N的数组   整数,每个整数之间用空格隔开。

我找到了这个解决方案

n = int(input())

nums = map(int, input().split())    
print(sorted(list(set(nums)))[-2])

有人可以解释一下为什么我们在这里使用map函数吗?

如果有人可以向我解释这一行:

nums = map(int, input().split())

16 个答案:

答案 0 :(得分:3)

所以我们可以走这行:

nums = map(int, input().split())

并将其分为几个子部分:

nums_in = input()
nums_split = nums_in.split()
nums = map(int, nums_split)

按顺序,nums_in将是作为字符串读取的数字的列表。对于输入字符串"1 5 73 29",它将为:

nums_in = "1 5 73 29"

nums_split将是每个数字分成一个字符串的数字列表:

nums_split = ["1", "5", "73", "29"]

现在,map函数将在列表(在此情况下为int)中的每个项目上调用函数(在这种情况下为"1", "5", "73", "29"),并使用函数返回的值。因此,对于此示例:

nums = [1, 5, 73, 29]

map function in Python 2总是返回一个列表,因此在Python 3中,我们需要再增加一个步骤:

nums = list(map(int, nums_split))

或者,在list comprehension中使用我最喜欢的Python结构之一:

nums = [int(n) for n in nums_split]

答案 1 :(得分:1)

map()函数将给定函数应用于可迭代的每个项,并返回结果列表。 然后,可以将map()(地图对象)的返回值传递给list()(创建列表),set()(创建集合)等函数。

示例1:map()如何工作?

def calculateSquare(n):
    return n*n

numbers = (1, 2, 3, 4)
result = map(calculateSquare, numbers)
print(result)

# converting map object to set
numbersSquare = set(result)
print(numbersSquare)

运行程序时,输出为:

<map object at 0x7f722da129e8>
{16, 1, 4, 9}

map()函数可迭代地为每个项目执行一个指定的函数。该项作为参数发送到函数。

map(function, iterables) 

Map将函数应用于input_list中的所有项目。

在大多数情况下,我们希望将所有列表元素一一传递给一个函数,然后收集输出。例如:

items = [1, 2, 3, 4, 5]
squared = []
for i in items:
    squared.append(i**2)

Map允许我们以一种更简单,更好的方式来实现它。在这里,您去了:

items = [1, 2, 3, 4, 5]
squared = list(map(lambda x: x**2, items))

map不是特别的pythonic。我建议改用列表推导:

map(f, iterable)

基本上等同于:

[f(x) for x in iterable]
单独的

map不能执行笛卡尔积,因为其输出列表的长度始终与输入列表相同。您可以通过列表理解来简单地做笛卡尔积:

[(a, b) for a in iterable_a for b in iterable_b]

语法有点混乱-基本上等同于:

result = []
for a in iterable_a:
    for b in iterable_b:
        result.append((a, b))

答案 2 :(得分:1)

最蟒蛇的方式, 使用filter()仅过滤列表中的第二个最大值。

if __name__ == '__main__':
    n = int(input())
    arr = list(map(int, input().split()))

maxv = max(arr)
l = list(filter(lambda x: x != maxv,arr))
print(max(l))

答案 3 :(得分:0)

Map是一个非常简单的内置函数。

因此,它将function应用于可迭代序列中的每个项目,即sequence

map(function, sequence)

因此,在您的情况下,nums = map(int, input().split()) input()。split()返回一个列表。对于该列表中的每个项目,都将应用功能int

在语法上等于

ls = []
for item in items: # here items is the sequence returned by split
    res = int(item)
    ls.append(res)
# ls will be list that the map returns.

因此,您输入中由split()函数分隔的所有项目都映射到int()函数。因此,所有项目都将转换为int类型。

答案 4 :(得分:0)

我用这个解决了,问我是否需要我解释!


for (int col = 0; row < NUM_COLS; row++)

答案 5 :(得分:0)

我已经准备了使用Map功能的程序,它将帮助您从插入的列表中找到亚军得分手。

import heapq

n = int(input())

arr = []

number = map(int, input().split())

arr = (list(set(number)))

m = sorted(set(arr))[-2]

arr.sort(reverse = True)
m = heapq.nlargest(2,arr)

print(m[1])

答案 6 :(得分:0)

我已经使用排序功能解决了这个问题,然后删除了最大条目,使用for循环重复了该条目的次数,然后从最后一个打印了第一个条目,从列表中找到了亚军得分

n = int(input('enter the size of list:'))
arr = list(map(int, input('Enter entries with space:').split()))

arr.sort()
k = arr[0]
for i in arr:
    if i > k:
        k = i
for l in range(arr.count(k)):
    arr.remove(k)
print(arr[-1])

答案 7 :(得分:0)

您也可以通过这种方式进行操作。首先,我们应确保没有重复项,因此我们将根据给定的值进行设置以删除重复项,然后按降序对其进行排序。然后,我们打印出列表的索引1处的第二个最大值。

if __name__ == '__main__':
    n = int(input())
    arr = map(int, input().split())
    arr_set = set(arr)
    arr_list = list(arr_set)
    arr_list.sort(reverse = True)
    print(arr_list[1])

答案 8 :(得分:0)

到目前为止,我发现此答案是最简单,最有效的。

  1. 我将数组变成了列表。
  2. 将列表变成一个集合,以避免重复的值。
  3. 然后对集合进行排序。

ordered = sorted(set(list(arr)))

最后,只需打印订购的套并询问倒数第二个[-2]值。

打印(订购[-2])

答案 9 :(得分:0)

以下是编写“亚军得分!”的非Python方式。码。对于刚刚从C / C ++转到python3的业余编码人员来说,这是有益的。由于我们大多数人对python中的映射概念不太满意,因此最后(在此处)创建了一个附加列表。希望你喜欢!

n = int(input())
arr = map(int, input().split())
lst=[]
for i in arr:
    lst.append(i)
lst.sort(reverse=True)
max=lst[0]
for i in range(len(lst)):
    if lst[i]==lst[i+1]:
        continue
    else:
        max=lst[i+1]
        break


print(max)

答案 10 :(得分:0)

def remove_duplicate(arr):
    li = [] 
    for n in arr: 
        if n not in li: 
            li.append(n) 
    return li
if __name__ == '__main__':
    n = int(input())
    arr = list(map(int, input().split()))
    arr.sort()
    arr=remove_duplicate(arr)
    print(arr[-2])

答案 11 :(得分:0)

这是我对同一问题的解决方案,使用set()删除重复项,然后使用sort()反过来查找所需的元素。希望这是解决这个问题的最简单方法。

if __name__ == '__main__':
    n = int(input())
    arr = map(int, input().split())

    x = set(arr)
    x = list(x)
    x.sort(reverse=True)
    print(x[1])

答案 12 :(得分:0)

Variables    ../data/variables.yaml

答案 13 :(得分:-1)

if __name__ == '__main__':
n = int(input())

arr = map(int, input().split())
x=sorted(list(arr))
a=x[-1]
for i in range(len(x)):
    if x[i]==a:
        print(x[i-1])
        break

答案 14 :(得分:-1)

A = []

n = int(input("Enter no. of Integers : "))

for  i in range(0, n):
    ele = int(input())
    A.append(ele)
print(A)
j = set(A)
j1 = list(j)
j1.sort(reverse=True)
print(j1)
print(j1[1]

答案 15 :(得分:-2)

目标是找到亚军。要获得亚军,我们必须先对列表进行升序排序,然后获得列表的第二位。

print(sorted(set(arr))[-2])