我试图找到由子列表组成的列表中的最小数字。 该程序的输出应如下所示:
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("")
&#34;测试&#34>的身体在行之前或之后
for y in x:
答案 0 :(得分:4)
Python有一个built-in min
function。但我想这是一个很好的学习练习,可以自己编写。
我们可以通过创建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个或更多元组达到最小值,则将元组本身进行比较以决定获胜者。
答案 1 :(得分:1)
假设子列表只有一个级别,你可以通过维护一个包含所看到的最小值的变量来实现这一点,另一个用于跟踪包含该值的列表:
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))
答案 2 :(得分:0)
简短而简单:
>>> 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
答案 3 :(得分:0)
如果你需要pythonic方式来处理,那么试试这个简单的代码: -
a = [[2,4,3],[1,7,9,4]]
min(reduce(lambda x,y : x+y, a))
Output:-
1