AttributeError:' int'对象没有属性' split'

时间:2015-02-27 16:37:35

标签: python

我在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 当然,由于错误

,我没有输出

5 个答案:

答案 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)

AttributeError:“ int”对象没有属性“ split” Can anyone help me with this