我试图在python中对列表列表进行排序,但它似乎无法正常工作。
def get(l):
return l[1]
def com(x,y):
return len(x) < len(y)
x = [['jis','1,2334'],['hshshau','123'],['sjuaj','3214']]
x.sort(cmp=com,key=get)
输出
[['jis', '1,2334'], ['hshshau', '123'], ['sjuaj', '3214']]
如何按第二元素的递增顺序实现列表?感谢。
答案 0 :(得分:2)
您不需要cmp
这里只需使用key
:
>>> x = [['jis','1,2334'],['hshshau','123'],['sjuaj','3214']]
>>>
>>> x.sort(key=lambda x:len(x[1]))
>>> x
[['hshshau', '123'], ['sjuaj', '3214'], ['jis', '1,2334']]
>>>
您需要知道sort
函数会根据key
对列表元素进行排序,此处您的密钥不会考虑元素的长度。你只是根据第二个元素进行排序,sort
将根据第二个元素lexicographicaly对你的列表进行排序!
有关python sort
函数的更多信息,请阅读https://docs.python.org/2/library/functions.html#sorted
答案 1 :(得分:1)
就像@Kasra说你不需要使用cmp
参数,你可以只使用密钥,如果你想把第二个元素视为整数(数字)你可以替换','和' '(假设只有,
将进入)(空字符串),然后转换为int并使用,以便相同长度的数字也正确排序。
示例 -
>>> x = [['jis','1,2334'],['hshshau','123'],['sjuaj','3214'],['nbhd','1,841']]
>>> x.sort(key = lambda x: int(x[1].replace(',','')))
>>> x
[['hshshau', '123'], ['nbhd', '1,841'], ['sjuaj', '3214'], ['jis', '1,2334']]
来自cmp
class LoginForm(forms.Form):
username = forms.CharField()
password = forms.CharField(widget=forms.PasswordInput())
def clean_username(self):
username = self.cleaned_data.get("username")
try:
user = User.objects.get(username=username)
except User.DoesNotExist:
raise forms.ValidationError("Are you sure you are registered? We cannot find this user.")
return username
参数 -
cmp指定两个参数(可迭代元素)的自定义比较函数,它应返回负数,零或正数
如上所示,如果两者相等,则cmp函数需要返回0;如果第一个更大则需要返回正数;如果第一个小于第二个参数,则返回负数。
但在你的情况下,你返回一个布尔值,导致问题。