【问题标题】:Finding the minimum from a nested list using recursion使用递归从嵌套列表中查找最小值
【发布时间】:2019-12-18 14:28:28
【问题描述】:

我正在尝试编写一个函数来查找嵌套列表的最小值。我已经编写了代码,但是得到了我不能在整数和列表之间使用

def minimumVal(Y):
   if len(Y) == 1:
      return Y[0]
   minimum = Y[0]
   if minimum < minimumVal(Y[1:]):
      return minimum
   else:
      return minimumVal(Y[1:])

【问题讨论】:

  • 你有嵌套列表抛出错误的例子吗?例如,嵌套列表是否必须是列表列表,还是可以是整数和列表的列表?如果是第二种,您需要在继续之前检查每个元素的类型,这似乎违反了您不能使用任何内置函数的限制。
  • 请发布您的真实代码。 if minimum &lt; minimumVal)Y[1:]): 有一个明显的拼写错误。
  • @aschultz,列表都是整数,比如[1, 2, 4, 5, [6, 8]]
  • @JohnGordon 这是我的真实代码,抱歉打错了,因为我们无法在这里复制和粘贴代码我犯了一个错误..
  • 我们无法在此处复制和粘贴代码 什么?当然可以。是什么阻止了你?

标签: python nested-lists minimum


【解决方案1】:

我的第一个想法是使用 itertools 折叠列表,但由于您不能使用内置函数,所以这里有一个有效的方法:

l = [2, 3, 4, 5, 6, [3, 4, 5, 10], [15, 4, 9, 8]]
minimum = []
for sublist in l:
    try:
        for num in sublist:
            if len(minimum) == 0:
                minimum.append(num)
            else:
                if num < minimum[0]:
                    minimum[0] = num
    except:
        if len(minimum) == 0:
            minimum.append(sublist)
        else:
            if sublist < minimum[0]:
                minimum[0] = num

print(minimum[0])

输出:2

如果你不能使用 len(),这里有另一个选项,有更多的尝试/例外:

l = [2, 3, 4, 5, 6, [3, 4, 5, 10], [15, 4, 9, 8]]
minimum = []
for sublist in l:
    try:
        for num in sublist:
            try:
                if num < minimum[0]:
                    minimum[0] = num
            except IndexError:
                    minimum.append(num)
    except:
        try:
            if sublist < minimum[0]:
                minimum[0] = sublist
        except IndexError:
                minimum.append(sublist)

print(minimum[0])

输出:2

最后一个选项,如果你不能使用内置函数追加你可以这样做:

l = [3, 4, 5, 6, 2, [3, 4, 5, 10], [15, 4, 9, 8]]
minimum = ['place holder']
for sublist in l:
    try:
        for num in sublist:
            if minimum[0] != 'place holder':
                if num < minimum[0]:
                    minimum[0] = num
            else:
                    minimum[0] = num
    except:
        if minimum[0] != 'place holder':
            if sublist < minimum[0]:
                minimum[0] = sublist
        else:
                minimum[0] = sublist

print(minimum[0])

输出:2

【讨论】:

  • 嗯,我觉得没关系,因为原帖有len。但是,如果您想避免使用 len,而不是“if len(minimum)”,您可以在 try 块中放入“if minimum[0] == whatever”,我认为这样可以解决问题。
  • @aschultz 哦,我喜欢这个主意,我还添加了另一个我认为与 len() 不同的选项,这在思想上有点相似。我认为 len() 没问题,因为原始代码也有,但只是为了确定
猜你喜欢
  • 2019-03-05
  • 2020-11-28
  • 2015-05-03
  • 1970-01-01
  • 2020-10-30
  • 2015-08-05
  • 2020-11-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多