关于python中[]的疑问

htt5156 2011-08-06 04:20:57
刚刚用python写了个qsort程序(如下) 运行结果不正确

import random

def qsort(L):
if len(L) == 1:
return L
elif len(L) == 0:
return []
pivot = L[random.randrange(len(L))]
L1 = [x for x in L if x < pivot]
L2 = [x for x in L if x > pivot]
qsort(L1).append(pivot)
L1 += qsort(L2)
return L1



调试了很久 发现问题出在return []这句上面
改成 return L 就正确了

正确代码:

import random

def qsort(L):
if len(L) <= 1:
return L
pivot = L[random.randrange(len(L))]
L1 = [x for x in L if x < pivot]
L2 = [x for x in L if x > pivot]
qsort(L1).append(pivot)
L1 += qsort(L2)
return L1



为什么L明明是空列表 却不能直接返回[] 代替呢?

在idle里面 我这样输入L = [].append(9)
再查看 L 发现什么都没有
但是如果这样L = [] L.append(9)肯定是正确的呀
[]难道在python里面不能当做空列表使用吗 还是什么其他原因
...全文
132 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
htt5156 2011-08-06
  • 打赏
  • 举报
回复
对头 我搞忘考虑 相等元素的情形了
iEverX 2011-08-06
  • 打赏
  • 举报
回复
可以这样写
import random

def qsort(L):
if len(L) <= 1:
return L
pivot = L[random.randrange(len(L))]
L1 = [x for x in L if x < pivot]
L2 = [x for x in L if x == pivot]
L3 = [x for x in L if x > pivot]
L = qsort(L1) + L2 + qsort(L3)
return L
iEverX 2011-08-06
  • 打赏
  • 举报
回复
如果 s = [1,1,1,1,1,1]

最后输出会是
[1,1,1,1,1,1]
[1]
iEverX 2011-08-06
  • 打赏
  • 举报
回复
LZ程序有问题吧。。
import random

def qsort(L):
if len(L) <= 1:
return L
pivot = L[random.randrange(len(L))]
L1 = [x for x in L if x < pivot]
L2 = [x for x in L if x > pivot]
qsort(L1).append(pivot)
L1 += qsort(L2)
return L1

s = [1,2,39,9,9,9,9,9,9,23,9,1122,9,9,0]
print(s)
print(qsort(s))


最后输出是

[1, 2, 39, 9, 9, 9, 9, 9, 9, 23, 9, 1122, 9, 9, 0]
[1, 2, 39, 9, 9, 9, 9, 9, 9, 23, 9, 9, 9, 0]
I_NBFA 2011-08-06
  • 打赏
  • 举报
回复
[].append是方法append的返回值,不是返回列表。
pamtry 2011-08-06
  • 打赏
  • 举报
回复
因为list的append方法是修改原列表,同时是没有返回值的

所以L = [].append(9)自然是错误的表达方式了

至于你说return [],这句操作本身是没有任何的问题的,只不过在使用方法上是需要注意的

像append、remove、pop、insert这类无返回值的操作,会导致你丢失对这个[]的引用

不过如果是+这种有返回值的操作,就不会有任何问题

例如:
x = [] + [1, 2, 3]
print x
stein42 2011-08-06
  • 打赏
  • 举报
回复
L = [].append(9)
append方法没有返回值,或者说返回None,副作用是往列表里添加一个元素。

37,743

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧