【问题标题】:How do i find the max value in a list that contains a list as a value?如何在包含列表作为值的列表中找到最大值?
【发布时间】:2020-02-20 23:00:39
【问题描述】:

我有一个 Python 课程的练习,我陷入了问题 4:

  1. 在空间 [1,50] 中使用 200 个随机整数创建 list1,并打印该数字是 10 的多少倍。

  2. 使用 50 个整数 [1,2,3, ..., 50] 创建 list2,然后使用 append() 函数将列表连接在一起并显示大小。

  3. 删除索引号从99到130的数据,删除项目后打印列表大小。
  4. 在列表中查找最大值和最小值。

我对如何查找 MAX 的第一个想法是对列表进行排序并获取最后一个值,但由于列表中的一项是列表,我收到此错误 TypeError: '<' not supported between instances of 'list' and 'int'

关于我必须做什么的任何想法? 在这个问题之前,我的代码如下:

import numpy as np

#Question1
j= 0; 
list1 = list(range(200))  #decalre list1

for i in range(200): 
 list1[i] = np.random.randint(50)     #create a list of length 200 with values 0 to 50.
 if list1[i] == 10: 
   j = j+1

print("Number 10 exists ",j,"times in the list.")

#QUESTION2
list2 = list(range(1,51))  #Declare list2
list1.append(list2)  #append list2 on list1
print(len(list1)) 

#QUESTION3
for i in range(99,130):  # deletes the items with an index number from 99 to 130
   list1.pop(i)

print(len(list1))

【问题讨论】:

  • 我认为你误解了这个问题。您可能应该在循环中使用append 来附加单个项目,而不是整个列表,因此列表保持数字列表。另请注意,如果您在循环中pop,您实际上会弹出位置 99、101、103、...
  • 另外,列表的构造方式,minmax 保证分别为 1 和 50(来自 lst2 的值,它们不是随机的,永远不会被删除)
  • 好的,我会试试的。非常感谢您回答我的问题。我对python有点陌生,仍在尝试获取逻辑。

标签: python python-3.x list


【解决方案1】:

您需要先展平您的列表,然后才能进行任何比较,因为您无法将 listint 进行比较。为此,您可以创建一个递归函数并传递您的列表

def flatten(l):
    return sum(([x] if not isinstance(x, list) else flatten(x) for x in l), [])

请注意,上述代码中的 list 是受 Python 保护的名称,并且指的是列表数据类型。该函数的作用是比较列表中的每个项目并检查它是否为列表类型。如果不是,则将其添加到列表中,如果是,则再次调用该函数并转到下一项。您现在可以运行以下命令:

>>> list1 = [1, 2, 3, 4, [5, 6, 7, 8]]
>>> flatten(list1)
>>> [1, 2, 3, 4, 5, 6, 7, 8]

您现在可以运行 Python 内置的 max()min() 函数

>>> max(flatten(list1))
>>> 8
>>> min(flatten(list1))
>>> 1

【讨论】:

    【解决方案2】:

    Python提供了一个内置函数来解决这个问题:
    max([2, 5, 4, 9, 3, 7])
    9
    我会合并列表,所以将list2的项目附加到list1,所以你只有一个轴,然后你可以使用内置函数
    如果您不想合并列表,您可以先获取列表中列表的最大值。然后你可以取这个最大值中的最大值和你外部列表的其他部分。

    您也可以更改此行:
    list1[i] = np.random.randint(50)
    您可以改为导入 random(它是一个内置模块)并这样做:
    list1[i] = random.randint(1, 50)
    但可能 numpy 更快。 如果您想使用 numpy,您仍然需要将行更改为:
    list1[i] = np.random.randint(1, 50)

    您需要更改问题 3 中的删除循环,因为如果您删除第 99 项,那么第 100 项就是新的第 99 项,因此您只删除每个第二个元素。你可以通过从 130 倒退到 99 来解决这个问题:
    for i in range(130, 99):

    希望我能帮助你解决这个问题。

    【讨论】:

    • 我的列表名为 list1 包含 200 个数字和一个列表。例如:[1,4,6,...,65,[1,2,3,..,50]]。如何我可以让 max() 与 int 和 list 一起使用吗?
    • 这并不能完全回答问题。 Python 将无法将整数与列表进行比较:TypeError: '>' not supported between instances of 'list' and 'int'
    【解决方案3】:

    这是您的代码中添加的代码:
    list2 = list1.pop(-1) list3 = list1 + list2 print(max(list3)) print(min(list3))

    请注意,list1 中有两个列表!

    【讨论】:

      猜你喜欢
      • 2015-07-04
      • 1970-01-01
      • 2019-06-13
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-24
      • 2016-09-23
      相关资源
      最近更新 更多