如何找到数组的最大数量?

时间:2019-02-16 16:02:38

标签: python arrays

说我有这个数组:

Letters = ["A","B","C","D"]
           #A           #B     #C   #D
numbers = [ [1,4,3],[2,4,5,5],[3],[2,3] ]

我想找到这些数组中最长的一个,并想要这样的输出:

B has the most values

我尝试过类似的事情

Letters = ["A","B","C","D"]
               #A       #B     #C   #D
numbers = [ [1,4,3],[2,4,5,5],[3],[2,3] ]
length = 0
maximum = 0
for i in numbers:
    for x in i:
        lenght = len(numbers)
        if length > maximum:
            maximum = length
print(maximum)

2 个答案:

答案 0 :(得分:1)

您可以zip列出两个列表,并使用max内置函数和自定义key来查找列表最长的元组:

from operator import itemgetter
s = max(zip(Letters, numbers), key= lambda x: len(itemgetter(1)(x)))[0]

输出

print(s, 'has the most values')
# B has the most values

答案 1 :(得分:1)

  1. 由于只需要列表的长度及其位置,因此将numbers转换为长度列表,其中每个长度的位置都与每个子列表的位置相对应:

    numbers_lengths = list(map(len, numbers)) # using `list` is not necessary
    # numbers_lengths == [3, 4, 1, 2]
    
  2. 您想将letters的每个元素与一个长度相关联,这意味着您需要一个不同的数据结构:

    Map = dict(zip(letters, numbers_lengths))
    # Map == {'A': 3, 'B': 4, 'C': 1, 'D': 2}
    
  3. 只需找到其值最大的密钥:

    result = max([(length, letter) for letter, length in Map.items()])
    # result == (4, 'B')
    

    之所以可行,是因为您可以比较元组:((2, 'a') > (0, 'b')) is True

    3.1另一种方法:

    result = max(Map.items(), key=lambda pair: pair[1])
    # result == ('B', 4)
    
  4. 因此,答案是result[1] == 'B'