[英]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()
內置函數sublist
將sublist
作為參數
聚會有點晚了,但這里有一種使用列表推導式查找子列表中最大數字的方法,沒有任何內置的 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.