我在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:&#39; int&#39;对象没有属性&#39; split&#39; 输入是一个文件(从shell给出,命令:&#34; python3 merge.py&lt; data.txt&#34;),每行一个数字列表。 例: 2 3 0 12 11 7 4 应该返回0 2 3 4 7 11 12 当然,由于错误
,我没有输出答案 0 :(得分:2)
如果您还想要索引,可以使用enumerate
:
data = ['itemA', 'itemB', 'itemC', 'itemD']
for (i, item) in enumerate(data):
print("Item #%d is %s" % (i, str(item)))
为了将来参考,您可以这样调试:
def mergeSort(lista):
res = []
print(lista)
for i in lista[0].split():
print(i)
res.append(int(i))
答案 1 :(得分:1)
它应该是for i in lista
而不是for i in lista[0].split()
,您可以通过列表理解来实现它:res = [int(num) for num in lista]
答案 2 :(得分:0)
您将字符串列表转换为mergeSort
例程顶部的整数列表。随后对mergeSort
的递归调用尝试执行相同的操作,现在除了整数列表之外。
您应该处理与mergeSort
例程完全分开的所有文件解析,该例程应该仅用于处理数字列表。这是一种关注点分离&#34;。
答案 3 :(得分:0)
您正在Python 2中运行此代码,并且只输入了一个数字。如果是这样,请用raw_input替换输入,它应该可以工作。
答案 4 :(得分:-1)