当前位置: 代码迷 >> python >> 如何比较子列表
  详细解决方案

如何比较子列表

热度:53   发布时间:2023-06-13 15:32:59.0

我正在尝试从子列表组成的列表中找到最小的数字。 程序的输出应如下所示:

least([[2,4,3],[1,7,9,4]])
in [[2,4,3],[1,7,9,4]] the least number is 1 found in sublist [1,7,9,4]

到目前为止,我的代码可以在列表中找到最小的数字,并打印出子列表,但是如何将它们组合在一起,这确实是我的问题。

# finds smallest number in list
def test(list1):
    x = list1[0]
    for i in list1:
        if i < x:
            x = i
    print(x)

# prints out sublists
def test2(num):
    for x in num:
        for y in x:
            print (y, end = " ")
        print("")

“测试”的正文在行之前还是行之后

for y in x:

Python具有 。 但是我想编写自己的东西是一个很好的学习练习。

我们可以编写一个函数,通过创建test函数的修改版本来查找包含最小元素的子列表。

关键思想是找到每个子列表的最小值,当找到新的最小值时,我们存储该最小值来自的子列表。

在下面的代码中,我将功能名称从test更改为minimum以使其更有意义。

def minimum(list1):
    ''' Finds smallest item in list1 '''
    x = list1[0]
    for i in list1:
        if i < x:
            x = i
    return x

def least(list2d):
    minseq = list2d[0]
    x = minimum(minseq)
    for seq in list2d[1:]:
        i = minimum(seq)
        if i < x:
            x = i
            minseq = seq
    print('In {} the least number is {} found in sublist {}'.format(list2d, x, minseq))

# Test

data = [[2, 4, 3], [1, 7, 9, 4], [6, 7, 5]]
least(data)

输出

In [[2, 4, 3], [1, 7, 9, 4], [6, 7, 5]] the least number is 1 found in sublist [1, 7, 9, 4]

但是,我们可以使用内置的min函数为我们找到最小的子列表,从而以更紧凑的方式编写代码。 这里的技巧是让min调用自己以找到每个子列表中的最小项,然后使用这些最小值来确定哪个子列表是最小项。

def least(list2d):
    minseq = min(list2d, key=min)
    x = min(minseq)
    print('In {} the least number is {} found in sublist {}'.format(list2d, x, minseq))

这个版本效率不高,因为它两次计算最小项的最小子列表。 为了避免这种情况,我们可以通过min生成器表达式:

def least(list2d):
    x, minseq = min((min(seq), seq) for seq in list2d)
    print('In {} the least number is {} found in sublist {}'.format(list2d, x, minseq))

该生成器表达式创建每个子列表的元组及其最小值,然后将这些元组传递给外部的min调用,以查找包含最小最小值的元组。 如果2个或更多的元组并列最少,则比较元组本身以决定获胜者。

假设子列表仅深一层,您可以通过维护一个包含最小可见值的变量来完成此操作,并通过另一个变量来跟踪包含该值的列表:

lists =  [[2, 4, 3], [1, 7, 9, 4]]

min_list = None
min_value = lists[0][0]    # initialse to the first item of the first list

for sublist in lists:
    min_ = min(sublist)
    if min_ < min_value:
        min_value = min_
        min_list = sublist

print("the least number is {} found in sublist {}".format(min_value, min_list))

简短:

>>> lst = [[2, 4, 3], [1, 7, 9, 4]]
>>> min_value_in_lst = min(min(sublist) for sublist in lst)
1

如果您想知道最小值的来源,只需创建一个循环即可:

for sublist in lst:
    if min_value_in_lst in sublist:
        return sublist

完整功能:

def least(lst):
    min_value_in_lst = min(min(sublist) for sublist in lst)
    that_sublist = None

    for sublist in lst:
        if min_value_in_lst in sublist:
            that_sublist = sublist
            break

    # print out the result

如果您需要使用pythonic方式进行处理,请尝试以下简单代码:-

a = [[2,4,3],[1,7,9,4]]
min(reduce(lambda x,y : x+y, a))

Output:-
1
  相关解决方案