Python 如何在包含列表作为值的列表中查找最大值?
我有一个python类的练习,我陷入了问题4:Python 如何在包含列表作为值的列表中查找最大值?,python,python-3.x,list,Python,Python 3.x,List,我有一个python类的练习,我陷入了问题4: 创建list1,在空格[1,50]中包含200个随机整数,并打印数字是10的多少倍 使用50个整数[1,2,3,…,50]创建list2,然后使用append()函数将列表连接在一起并显示大小 删除索引号为99到130的数据,删除项目后打印列表大小 在列表中查找最大值和最小值 关于如何查找MAX,我的第一个想法是对列表进行排序并获取最后一个值,但由于列表中的1项是列表,因此我得到了以下错误TypeError:“Python提供了一个内置函数来解决此
list1
,在空格[1,50]中包含200个随机整数,并打印数字是10的多少倍list2
,然后使用append()
函数将列表连接在一起并显示大小关于如何查找MAX,我的第一个想法是对列表进行排序并获取最后一个值,但由于列表中的1项是列表,因此我得到了以下错误
TypeError:“Python提供了一个内置函数来解决此问题:
最大值([2,5,4,9,3,7])
9
我会合并列表,将列表2的项目附加到列表1,这样您就只有一个轴,然后您可以使用内置函数
如果不想合并列表,可以先获得列表中列表的最大值。然后你可以从这个最大值和你的外部列表的其他部分中取最大值
您还可以更改此行:
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来解决该问题:
适用于范围(130,99)内的i:
我希望我能帮助您解决这个问题。您需要先将列表展平,然后才能进行任何比较,因为您无法将列表
与int
进行比较。为此,您可以创建一个递归函数并传递列表
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
以下是添加到您的代码中的代码:
list2=list1.pop(-1)
列表3=列表1+列表2
打印(最大值(列表3))
打印(最小值(列表3))
请注意,列表1中有两个列表!我的名为list1的列表包含200个数字和一个列表。例如:[1,4,6,…,65,[1,2,3,…,50]]。如何使max()与int和列表一起工作?这并不能准确回答问题。Python将无法将整数与列表进行比较:TypeError:“>”在“list”和“int”的实例之间不受支持。
我想您误解了这个问题。您可能应该在循环中使用append
来追加单个项目,而不是整个列表,因此列表保持为数字列表。还请注意,如果在循环中弹出pop
,实际上是在位置99、101、103处弹出元素……此外,按照列表的构造方式,min
和max
分别保证为1和50(来自lst2
的值不是随机的,永远不会被删除)好的,我试试。非常感谢你回答我的问题。我对python有点陌生,仍在尝试获取逻辑。
>>> max(flatten(list1))
>>> 8
>>> min(flatten(list1))
>>> 1