簡體   English   中英

python 列表理解:使用列表理解查找子列表中的最大數字

[英]python list comprehension :find largest number in sublist using list comprehension

我正在嘗試使用列表理解在列表中找到子列表中的最大數字。

max_list = []
max_element = [ max_list:=j  for i in range(len(list1)) 
                             for j in list1[i] if j>max1 ]

我想要 output,例如每個子列表中最大的 [7,6,9]。

這是我的輸入

list1 = [[1,7,3],[4,5,6],[7,8,9]]

有 function max() 在列表中擁有最大的數字。 我會按如下方式解決問題:

for list_num in list1:
        list_max.append(max(list_num))

嘗試這個:

lst = [[1,7,3],[4,5,6],[7,8,9]]
print([max(item) for item in lst])

代碼:

list1 = [[1,7,3],[4,5,6],[7,8,9]]
max_list = [max(sublist) for sublist in list1]
print(max_list)

Output:

[7, 6, 9]

說明:

在此 listcomp 中,我們沿list1進行迭代,對於每個子列表,我們調用max()內置函數sublistsublist作為參數

聚會有點晚了,但這里有一種使用列表推導式查找子列表中最大數字的方法,沒有任何內置的 function。

此方法不適用於 Python < 3.8,因為使用了Walrus operator

list1 = [[1, 7, 3], [4, 5, 6], [7, 8, 9]]
max_list = [[maximum := num for num in sublist[1:] if num > maximum][-1] for sublist in list1 if (maximum := sublist[0]) is not None]

Output:

[7, 6, 9]

好吧,這種格式完全無法理解,沒有列表理解的替代方案實際上是:

max_list = []
for sublist in list1:
    if maximum := sublist[0] is not None:
        maximum_list = []
        for num in sublist[1:]:
            if maximum < num:
                maximum = num
            maximum_list.append(maximum)
        max_list.append(maximum_list[-1])

解釋:

  • 對於每個子列表,我們將數字與maximum一一比較。 如果num大於maximum ,那么我們使用 Walrus 運算符將maximum替換為num
  • 這將創建一個列表,其中包含自遍歷列表開始以來遇到的最大數量,例如[1, 7] 因此,整個列表的最大值是最后一個,索引為-1
  • 但是在遍歷每個子列表之前有必要初始化maximum 為此,我們執行一個無用的條件: sublist[0]) is not None 無論sublist[0]的值如何,此條件將始終返回True 優點是它允許將maximum初始化為sublist[0] ,再次感謝 Walrus 運算符: (maximum:= sublist[0]) is not None
  • 由於條件是在遍歷每個子列表之前執行的,而不是遍歷整個列表,我們可以從第二項開始: sublist[1:]

限制:

  • 假定該列表僅包含具有至少兩個術語的子列表。

接受任何長度的子列表的修改后的列表理解如下(但速度較慢):

list1 = [[1, 7, 3], [4, 5, 6], [7, 8, 9], [1], []]
max_list = [[maximum := num if num > maximum else maximum for num in sublist][-1] for sublist in list1 if sublist if (maximum := sublist[0]) is not None]
# [7, 6, 9, 1]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM