Sorting ';非类型';对象在python中不可下标
Sorting ';非类型';对象在python中不可下标,sorting,python-3.7,nonetype,Sorting,Python 3.7,Nonetype,sort()对列表进行适当排序并返回None。看起来您打算改为使用排序的: #i'm just testing it lst=[3, 2, 4, 5,1] print([i for i in lst if i % 2 != 0].sort()[0]) #i haven't tried any thing #I expect the output 1 但是请注意,如果只获取列表的第一个元素,则无需对列表进行排序。您可以使用min来获得性能更好的相同结果(O(n)而不是O
sort()
对列表进行适当排序并返回None
。看起来您打算改为使用排序的:
#i'm just testing it
lst=[3, 2, 4, 5,1]
print([i for i in lst if i % 2 != 0].sort()[0])
#i haven't tried any thing
#I expect the output 1
但是请注意,如果只获取列表的第一个元素,则无需对列表进行排序。您可以使用min
来获得性能更好的相同结果(O(n)而不是O(nlog(n)):
这里的问题是,当您在列表上运行“sort”函数时,该函数会更新列表并返回void。因此,您实际上是在尝试调用非类型对象的索引
解决此问题的最佳方法是将筛选器设置为变量,在此变量上运行排序,然后打印想要的值
例:
l=[i为lst中的i,如果i%2!=0]
l、 排序()
打印(l[0])
sort()正在修改方法并返回None
这一个有效:
print(min([i for i in lst if i % 2 != 0]))
或者使用像这样的排序方式嘿嘿#我没有尝试过任何东西
——我建议您这样做:删除[0]
,然后查看表达式的类型(您可以使用类型
,或者只打印即可)。
print(min([i for i in lst if i % 2 != 0]))
lst=[3, 2, 4, 5,1]
odds = [i for i in lst if i % 2 != 0]
ods.sort()
print(ods[0])