Python 属性错误:';int';对象没有属性';拆分';
我正在用python进行合并排序,但我有一个问题。当我尝试从控制台插入列表时(每行一个数字,返回一个字符串列表),我无法将其转换为整数。你能帮我理解这个问题吗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
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'。我做了更正。如果你愿意的话,我应该把修正后的代码放到楼上吗。未来的读者最好同时看到两个版本,或者至少是相关的更新(不一定是两个完整版本的代码,因为合并排序细节并不重要)。