Python 混淆与比较错误

Python 混淆与比较错误,python,list,int,comparison,Python,List,Int,Comparison,当我运行以下命令时 def最大值(L): m=L[0][0] 对于L中的项目: 如果项目[0]>m: m=项目 返回m L=[[20,10],[10,20],[30,20],[12,16]] 打印(最大(L)) 我得到了错误 TypeError:无序类型:int()>list()第4行。当我试图获取两个成员的len()时,就会出现混淆。因此,从错误消息可以合理地假设m是我运行的列表 def最大值(L): m=L[0][0] 对于L中的项目: 蓝(米) 如果项目[0]>m: m=项目 返回m L

当我运行以下命令时

def最大值(L):
m=L[0][0]
对于L中的项目:
如果项目[0]>m:
m=项目
返回m
L=[[20,10],[10,20],[30,20],[12,16]]
打印(最大(L))
我得到了错误
TypeError:无序类型:int()>list()
第4行。当我试图获取两个成员的
len()
时,就会出现混淆。因此,从错误消息可以合理地假设
m
是我运行的列表

def最大值(L):
m=L[0][0]
对于L中的项目:
蓝(米)
如果项目[0]>m:
m=项目
返回m
L=[[20,10],[10,20],[30,20],[12,16]]
打印(最大(L))
并获取错误
len(m)TypeError:int类型的对象没有len()
。好的,剩下的唯一选项是
项[0]
是列表。。。同样地

def最大值(L):
m=L[0][0]
对于L中的项目:
len(项目[0])
如果项目[0]>m:
m=项目
返回m
L=[[20,10],[10,20],[30,20],[12,16]]
打印(最大(L))

我得到了相同的错误:
len(项[0])TypeError:int类型的对象没有len()
。因为我有点确定你可以比较2个整数,所以我很难理解如何处理最初声明的错误。

在for循环的第一次迭代中,执行
m=item
会使
m
引用一个
列表
,该列表之后无法与
int
进行比较(即
项[0]>m
)在下一次迭代中

相反,您应该将
m
分配给
item
中的一个元素,比如
m=item[0]
(从每个子列表中的第一个元素中查找最大值),具体取决于您希望如何计算最大值


更轻松的是,如果你在寻找一个全局最大值,你可以简化列表并使之更容易。

正如Moses Koledoye所说,你得到了
TypeError:unorderable types:int()>list()
错误,因为循环中的第一个赋值将整个
分配给
m
,因此,下次尝试比较时,您将列表
m
与整数
项[0]
进行比较。因此,您只需将
项[0]
分配给
m
。像这样:

def max0(L):
    m = L[0][0]
    for item in L:
        if item[0] > m:
            m = item[0]
    return m

L = [[20, 10], [10, 20], [30, 20], [12, 16]]
print(max0(L))
输出

30
[30, 20]
但是有一种更好的方法可以做到这一点:使用内置的
max
和一个键函数,该键函数从传递给`max'的序列中的每个列表中获取第一个元素

from operator import itemgetter

L = [[20, 10], [10, 20], [30, 20], [12, 16]]
m = max(L, key=itemgetter(0))
print(m)
输出

30
[30, 20]
您也可以使用一个简单的
lambda
函数来实现这一点,而不是导入
itemgetter
,但是
itemgetter
更有效

m = max(L, key=lambda u:u[0])
事实上,您不需要在这里提供一个键函数,因为Python将很乐意比较两个列表(或元组)。它比较两个列表中的对应元素,一旦发现一对不相等的元素,就会停止。因此
[30,20]>[30,19]
的计算结果为
True
[30,20]>[29,1000]
。两个列表的长度不必相同<代码>[30,20,0]>[30,20]计算结果为
True

所以你可以这么做

m = max(L)

但是使用
itemgetter
更好(而且可能更有效),因为它明确表示只按第一个元素比较子列表。

你认为
len(m)
做什么?它计算列表的长度。。。然后你就完全忽略了。?。。。。它只是想看看我是否会出错,因为它不适用于数字数据类型,因此当编译器声明Comparison1中存在1时,我会产生错误,这就造成了混淆。Python有一个高效的内置
max
函数,无需编写自己的函数。但是,如果你想为学习目的编写自己的代码,最好给它起一个不同的名字。你对
item[0]>m
有什么期望?一个是列表,另一个是整数。您给出的错误消息都与此一致。比较结果应该是什么?“我有点确定你可以比较2个整数”-是的,但这不是你正在做的。你没有告诉我们你希望你的代码做什么。是否只想在
L
中找到第一个元素最大的子列表?