【发布时间】:2015-04-30 10:50:05
【问题描述】:
我正在 python 中进行合并排序,但我遇到了问题。当我尝试从控制台插入列表(每行一个数字,返回字符串列表)时,我无法将其转换为整数。你能帮我理解这个问题吗?
import sys
def mergeSort(lista):
res = []
for i in lista[0].split():
res.append(int(i))
if len(res)>1:
mid = len(res)//2
lefthalf = res[:mid]
righthalf = res[mid:]
mergeSort(lefthalf)
mergeSort(righthalf)
i=0
j=0
k=0
while i<len(lefthalf) and j<len(righthalf):
if lefthalf[i]<righthalf[j]:
res[k]=lefthalf[i]
i=i+1
else:
res[k]=righthalf[j]
j=j+1
k=k+1
while i<len(lefthalf):
res[k]=lefthalf[i]
i=i+1
k=k+1
while j<len(righthalf):
res[k]=righthalf[j]
j=j+1
k=k+1
print(res)
alist = []
for l in sys.stdin:
alist.append(l.strip())
mergeSort(alist)
代码错误说:AttributeError: 'int' object has no attribute 'split' 输入是一个文件(使用命令从 shell 给出:“python3 merge.py
【问题讨论】:
-
这意味着
lista中的第一项是int对象,而不是字符串。不知何故,您的代码正在将一个整数附加到您传入的列表中。所以这不能是一个完整的代码示例...... -
但它们都是一个单元字符串...
-
您的代码显示使用
str.split()的唯一位置是在表面上包含字符串的列表元素上。您可能没有查看您正在运行的相同代码,或者您没有在此处发布您正在运行的相同代码。 -
我可以发誓代码是一样的。当我尝试输出“lista”时,它返回:'1\r3\r4\r56\r65\r3\r4\r3\r2\r9\r10'
-
我现在仔细检查一下。当您递归调用
mergeSort时,您传递的是整数列表而不是字符串列表。您应该在mergeSort例程之外处理从字符串到整数的转换。
标签: python