Python 属性错误:';int';对象没有属性';拆分';

Python 属性错误:';int';对象没有属性';拆分';,python,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

我正在用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)
导入系统 def mergeSort(列表A): res=[] 对于lista[0]中的i,拆分(): res.append(int(i)) 如果len(res)>1: mid=len(res)//2 lefthalf=res[:mid] righthalf=分辨率[中间:] 合并排序(左半部分) 合并排序(右半部分) i=0 j=0 k=0
虽然我应该是lista中i的
,而不是lista[0]中i的
。split()
,您可以通过列表理解来实现它:
res=[int(num)for num in lista]
如果您还需要索引,可以使用
枚举

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

您正在将
mergeSort
例程顶部的字符串列表转换为整数列表。对
mergeSort
的后续递归调用也尝试执行相同的操作,但现在对整数列表的调用除外


您应该完全独立于
mergeSort
例程来处理所有文件解析,该例程应该设计为只处理数字列表。这是一种“关注点分离”

您在Python2中运行此代码,并且只输入了一个数字。如果这是真的,用原始输入替换输入,它应该可以工作。

AttributeError:“int”对象没有属性“split”

这意味着
列表中的第一项a
int
对象,而不是字符串。不知何故,您的代码在传递的列表中添加了一个整数。因此,这不可能是一个完整的代码示例…但它们都是一个单位字符串…代码显示使用
str.split()
的唯一位置是在表面上包含字符串的列表元素上。你可能没有看到你正在运行的代码,或者你没有在这里发布你正在运行的代码。我可以发誓代码是一样的。当我尝试输出“lista”时,它返回:“1\r3\r4\r56\r65\r3\r4\r3\r2\r9\r10”我现在仔细检查后看到。当递归调用
mergeSort
时,传递的是整数列表,而不是字符串列表。您应该在
mergeSort
例程之外处理从字符串到整数的转换。我已经这样做了,并且收到了错误:以10为基数的int()的文本无效:“1\r3\r4\r56\r65\r3\r3\r2\r9\r10”这就是我这样做的原因split@user28011994您确定data.txt中每行有一个数字吗?看起来您的
alist
只包含1个元素,其中包含所有数字,这很奇怪。我将其写成每行1个数字。在循环开始之前,添加print语句以查看变量
lista
的内容,在每次迭代开始时,
i
的内容可能不是您所期望的。事实上,这并不是我想要的输出。lista的输出为'1\r3\r4\r56\r65\r3\r4\r3\r2\r9\r10'(这就是我使用拆分的原因),由于循环中的错误,我无法输出'I'。我做了更正。如果你愿意的话,我应该把修正后的代码放到楼上吗。未来的读者最好同时看到两个版本,或者至少是相关的更新(不一定是两个完整版本的代码,因为合并排序细节并不重要)。