[英]Unable to reverse lists in Python, getting "Nonetype" as list
我有一个.py
文件,它需要一个列表,找到最小的数字,将其放入一个新数组中,从第一个数组中删除最小的数字,然后重复直到原始数组返回不包含更多项目:
def qSort(lsort):
listlength = len(lsort)
sortedlist = list()
if listlength == 0:
return lsort
else:
while listlength > 0:
lmin = min(lsort)
sortedlist.append(lmin)
lsort.remove(lmin)
listlength = len(lsort)
return sortedlist
现在另一个.py
文件导入qSort
并在某个列表上运行它,将其保存到一个变量中。 然后我尝试使用列表中的.reverse()
命令,最终将其作为NoneType
。 我尝试使用reversed()
,但它所做的只是说"<listreverseiterator object at 0xSomeRandomHex>"
:
from qSort import qSort #refer to my first Pastebin
qSort = qSort([5,42,66,1,24,5234,62])
print qSort #this prints the sorted list
print type(qSort) #this prints <type 'list'>
print qSort.reverse() #this prints None
print reversed(qSort) #this prints "<listreverseiterator object at 0xSomeRandomHex>"
谁能解释为什么无论我做什么,我似乎都无法反转列表?
正如 jcomeau 所提到的, .reverse()
function 更改了列表。 它不返回列表,而是改变qSort
。
如果您想“返回”反向列表,以便可以像您在示例中尝试的那样使用它,您可以做一个方向为 -1 的切片
所以用print qSort[::-1]
替换print qSort.reverse()
你应该知道切片,它有用的东西。 我真的没有在教程中看到一个地方一次性描述了所有内容( http://docs.python.org/tutorial/introduction.html#lists并没有真正涵盖所有内容)所以希望这里有一些说明性例子。
语法是: a[firstIndexInclusive:endIndexExclusive:Step]
>>> a = range(20)
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
>>> a[7:] #seventh term and forward
[7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
>>> a[:11] #everything before the 11th term
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> a[::2] # even indexed terms. 0th, 2nd, etc
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
>>> a[4:17]
[4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]
>>> a[4:17:2]
[4, 6, 8, 10, 12, 14, 16]
>>> a[::-1]
[19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
>>> a[19:4:-5]
[19, 14, 9]
>>> a[1:4] = [100, 200, 300] #you can assign to slices too
>>> a
[0, 100, 200, 300, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
list.reverse() 就地反转并且不返回任何内容(无)。 所以你不要说:
mylist = mylist.reverse()
你说:
mylist.reverse()
或者:
mylist = list(reversed(mylist))
reverse()
list
方法对列表进行排序并返回None
以提醒您这一点(根据文档中的注释 7)。 The built-in reversed()
function returns an iterator object, which can be turned into a list
object by passing it to the list()
constructor function like this: list(reversed(qSort))
. 你可以通过创建一个步长为负的切片来完成同样的事情,这样它就会倒退,即qSort[::-1]
。
顺便说一句, list
也有一个sort()
方法(但要小心,它也返回None
;-)。
l5= [60,70,77]
myl2 = 列表(反转(l5))
打印(myl2)
或者
mylist2 =[50,60,80,90]
mylist2.reverse()
打印(mylist2)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.