使用Python查詢非零分組的最小值


在Python中,分組是由基於特定條件或操作具有相同特徵的元素的集合或集合定義的。分組可以用列表、集合或其他資料結構表示。在這個問題陳述中,非零分組指的是列表的子集,其中所有元素都非零,並且彼此相鄰,中間沒有任何零值。在Python中,我們將使用一些內建函式,如list()、groupby()、lambda等來解決非零分組的最小值問題。

語法

以下語法在示例中使用

list()

list()是Python中一個內建方法,可以用於將多個元素放在單個變數中。

groupby()

groupby()是Python中的一個內建方法,它傳遞引數來新增要分組的變數的名稱。

lambda

lambda函式提供了一種使用lambda關鍵字宣告簡短匿名函式的快捷方式。lambda函式的行為與使用def關鍵字表達時相同。

range()

range()是Python中的一個內建函式,它返回給定範圍內的元素序列。預設情況下,初始範圍總是從0開始,並透過指定特定範圍結束。

len()

len()是Python中的一個內建函式,它返回物件的長度。

min()

min()是Python中的一個內建函式,它返回非零分組中的最小元素。

append()

append()是Python中一個內建方法,它在列表的末尾新增元素。

join()

join()是Python中一個內建方法,它使用分隔符字串接受可迭代元素。

map()

在Python中,map()函式允許我們處理列表中的所有元素,並透過轉換它來迭代所有元素,而無需使用顯式的for迴圈。

split()

split()是Python中的一個內建函式,它將字串分割成字串列表。

使用itertools

在下面的示例中,程式使用Python itertools模組,該模組透過使用內建函式groupby()和lambda來幫助提供複雜的迭代,這些過程查詢最小非零分組。

示例

import itertools
def minimum_nonzero(lst):
    non_zero_groups = [list(group) for key, group in itertools.groupby(lst, key=lambda x: x != 0) if key]
    min_values = [min(group) for group in non_zero_groups]
    return non_zero_groups, min_values
# Create the non-group of list element
lst = [2, 9, 0, 0, 0, 3, 1, 0, 0, 5, 0, 0, 9, 0]
# Calling function sets to two variables
groups, min_values = minimum_nonzero(lst)
for i in range(len(groups)):
    print(f"Group: {groups[i]}, Minimum Value: {min_values[i]}")

輸出

Group: [2, 9], Minimum Value: 2
Group: [3, 1], Minimum Value: 1
Group: [5], Minimum Value: 5
Group: [9], Minimum Value: 9

使用min()和append()函式

在下面的示例中,程式使用內建函式min()來查詢非零分組中最小的數字,而append()函式將元素新增到分組中。

示例

def min_group_nonzero(lst):
    def min_group(lst):
        group = []
        for num in lst:
            if num == 0:
                if group:
                    yield group, min(group)
                    group = []
            else:
                group.append(num)
        if group:
            yield group, min(group)    
    return list(min_group(lst))
# Create the list for non-zero group
lst = [1, 2, 3, 0, 0, 0, 0, 4, 5, 0, 0, 0, 23, 44, 0, 2]
# Calling function
result = min_group_nonzero(lst)
# Print the group element and minimum value from non-zero group
for group, min_value in result:
    print(f"Group: {group}, Minimum Value: {min_value}")

輸出

Group: [1, 2, 3], Minimum Value: 1
Group: [4, 5], Minimum Value: 4
Group: [23, 44], Minimum Value: 23
Group: [2], Minimum Value: 2

使用列表推導式

在下面的示例中,程式使用列表推導式,其中一些內建函式,如join()、split()和min()將用於查詢最小非零分組。

示例

def min_nonzero_groups_2(lst):
    non_zero_groups = [list(group) for group in ''.join(map(str, lst)).split('0') if group]
    min_values = [min(group) for group in non_zero_groups]
    return non_zero_groups, min_values
# Create the non-zero list
lst = [0, 0, 0, 1, 2, 9, 0, 0, 5, 2, 3]
groups, min_values = min_nonzero_groups_2(lst)
# Print the group along with minimum value
for i in range(len(groups)):
    print(f"Group Element: {groups[i]}, Minimum Value: {min_values[i]}")

輸出

Group Element: ['1', '2', '9'], Minimum Value: 1
Group Element: ['5', '2', '3'], Minimum Value: 2

結論

最小非零分組是從分組元素中查詢最小值的特定任務。我們使用了列表推導式、itertools模組、min()和append()等方法來解決問題陳述。一些非零分組的例子包括:資料分析、訊號處理、時間序列分析、資料清洗和預處理等。

更新於:2023年8月14日

961 次檢視

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.