【问题标题】:Find the Runner-Up Score >> Explanation查找亚军分数 >> 解释
【发布时间】:2018-09-14 06:15:19
【问题描述】:

鉴于参加者的大学运动会成绩单, 你需要找到亚军的分数。给你分数。 将它们存储在一个列表中,然后找到亚军的分数。

输入格式

第一行包含 N。第二行包含 N 个数组 每个用空格分隔的整数。

我找到了这个解决方案

n = int(input())

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

谁能解释一下为什么我们在这里使用地图功能?

另外,如果有人可以解释我这一行:

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

【问题讨论】:

  • 通过应用int 函数将每个项目转换为整数。比如num1 = int('1')等等。

标签: python


【解决方案1】:

所以我们可以采取这条路线:

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 函数将对列表(在本例中为"1", "5", "73", "29")中的每个项目调用一个函数(在本例中为 int),并使用函数返回的值创建一个新列表。所以,对于这个例子:

nums = [1, 5, 73, 29]

map function in Python 2总是返回一个列表,所以在Python 3中,我们需要多加一步:

nums = list(map(int, nums_split))

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

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

【讨论】:

  • 只有 nitpick: map 会给你一个迭代器,而不是一个列表。
  • 那怎么样?我已经编辑了 Python 2 和 3 的答案。谢谢!
【解决方案2】:

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类型。

【讨论】:

    【解决方案3】:

    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 并不是特别像 Python 的。我建议改用列表推导:

    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))
    

    【讨论】:

      【解决方案4】:

      我用这个解决了,请问需要我解释一下吗!


      n = int(input())
      arr = sorted(list(map(int, input().split())))
      max = -100
      runner = -100
      for i in arr:
          if i > max:
              runner = max
              max = i
      print(runner)
      

      【讨论】:

        【解决方案5】:

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

        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】:
          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]
          

          【讨论】:

            【解决方案7】:

            这是我对同一问题的解决方案,使用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])
            

            【讨论】:

              【解决方案8】:

              您也可以通过这种方式进行操作。首先,我们应该确保我们没有任何重复,因此我们从给定的值中创建一个集合以删除重复的值,然后按降序对它们进行排序。然后我们打印列表索引 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])
              

              【讨论】:

                【解决方案9】:

                我已经使用排序函数解决了这个问题,然后删除了最大条目,使用 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])
                

                【讨论】:

                  【解决方案10】:

                  我发现这个答案是迄今为止最简单和最有效的。

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

                  有序 = 排序(set(list(arr)))

                  最后,刚刚打印了有序集并要求倒数第二个 [-2] 值。

                  打印(有序 [-2])

                  【讨论】:

                    【解决方案11】:

                    以下是编写“亚军分数!”的一种非常非 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)
                    

                    【讨论】:

                      【解决方案12】:
                      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])
                      

                      【讨论】:

                        【解决方案13】:
                        if __name__ == '__main__':
                            n = int(input())
                            arr = map(int, input().split())
                            print(sorted(list(set(arr)))[-2])
                        

                        【讨论】:

                        • 感谢您提供此代码 sn-p,它可能会提供一些有限的即时帮助。 proper explanation 将通过展示为什么这是解决问题的好方法,并使其对有其他类似问题的未来读者更有用,从而大大提高其长期价值。请edit您的回答添加一些解释,包括您所做的假设。
                        【解决方案14】:
                        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
                        

                        【讨论】:

                        • 不鼓励仅使用代码的帖子。请通过解释增加一些价值。
                        【解决方案15】:

                        目标是找到季军。要获得亚军,我们必须先对名单进行升序排序,然后才能获得名单的第二名。

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

                        【讨论】:

                        • 其他答案中已经发布了相同的解决方案。
                        【解决方案16】:

                        最pythonic的方式, 使用 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))
                        

                        【讨论】:

                        • 这根本不能回答问题。
                        • @Praneeth - lambda 函数是否采用最大值之前的第二个最大值?如果可以请详细说明这一行:l = list(filter(lambda x: x != maxv,arr))
                        【解决方案17】:
                        result = list(arr)
                        rem_val = []
                        max_v = max(result)
                        for i in result:
                            if i < max_v:
                            rem_val.append(i)
                        print(max(rem_val))
                        

                        块引用 根据说明,您需要将您的 arr 值转换为列表,因为您的 arr 值显示为 3434543。

                        【讨论】:

                          【解决方案18】:

                          以下是我对解决方案的看法:

                          if __name__ == '__main__':
                              n = int(input()) # Declaring size of array eg: 5 <- 5 values
                              arr = map(int, input().split()) # Values in array eg: 1 2 3 4 5
                              
                              scores = [x for x in arr] # Storing values of array in a list
                              print(max([x for x in scores if x!= max(scores)]))
                          

                          这个想法是创建 2 个列表:

                          • 列表 1 包括输入数组的所有值。
                          • 列表 2 不包括列表 1 中的最大值,我只是打印出列表 2 中的最大值。

                          【讨论】:

                          • arrayscores 都不是必需的。就做scores = list(map(int, input().split()))...
                          • 你也在反复调用max(scores)。在列表理解之外调用一次并使用保存的值会更简单......
                          【解决方案19】:

                          我已经使用排序和函数解决了这个问题,然后我们在最大项目之前获得了亚军分数。

                          if __name__ == '__main__':
                            n = int(input())
                            arr = map(int, input().split())
                          
                            list =[]
                            for val in arr: 
                              if val in list: 
                               continue 
                              else:
                                list.append(val)
                            sorted = sorted(list)
                            print (sorted[-2])
                          

                          【讨论】:

                            猜你喜欢
                            • 1970-01-01
                            • 1970-01-01
                            • 2020-09-14
                            • 1970-01-01
                            • 2016-03-17
                            • 2016-01-10
                            • 1970-01-01
                            • 2015-04-05
                            • 2016-11-24
                            相关资源
                            最近更新 更多