python - 为什么我的列表是 Nonetype?在 python

标签 python python-3.x

我不明白为什么我的列表在 Nonetype 中。我正在尝试构建一个接收 int 列表的函数,该列表的第一个索引是主元,然后对列表的其余部分进行排序,因此每个大于主元的 int 都将位于右侧,而 int 则小于枢轴将在左侧。整数不需要从小到大排序。 这是我的代码:

def divide_list(lst):
    pivot = lst[0]
    lst= lst.reverse()
    for i in lst:
        if i>pivot:
            lst.append(i)
            lst.remove(i)
    return lst

谢谢!

最佳答案

lst.reverse() 原地 反转列表并返回 None。不要将返回值分配回 lst:

def divide_list(lst):
    pivot = lst[0]
    lst.reverse()
    for i in lst:
        if i>pivot:
            lst.append(i)
            lst.remove(i)
    return lst

如果您不想就地更改 lst,请使用负切片以相反的顺序获取列表的新副本:

def divide_list(lst):
    pivot = lst[0]
    lst = lst[::-1]
    for i in lst:
        if i>pivot:
            lst.append(i)
            lst.remove(i)
    return lst

这样还是会导致各种问题;当您在 for 循环中就地更改列表时,您的方法将不起作用。当您向列表中添加和删除元素时,迭代器不会得到更新并且列表行为将不是您所期望的。

假设您有一个列表 [3, 4, 1, 2] 反转后,主元为 2。在循环中,for 循环使用的迭代器查找 lst[0],然后您将 3 移到循环的末尾通过附加和删除列表。现在列表看起来像 [4, 1, 2, 3] 并且循环前进到 lst[1],所以到 1 值. 4 已被完全跳过!

关于python - 为什么我的列表是 Nonetype?在 python ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19818971/

相关文章:

python - boto3 资源(如 DynamoDB.Table)的类型注释

Python - 从变量中提取数据的正则表达式

python - 使用 lxml 覆盖 XML 中的文本

python - asyncio await 在协程中无法识别

python - python 类中自动返回值

python - python 中的 32 位 unicode

python - 无法控制游戏中的物体

python - XPath - 返回具有特定字符串模式的所有节点

python - CSV 编写器在单独的列中显示每个字符

python - Django 的 RSS 解析器