有没有办法解决这个 TypeError
Posted
技术标签:
【中文标题】有没有办法解决这个 TypeError【英文标题】:Is there a way to solve this TypeError 【发布时间】:2020-02-25 12:18:19 【问题描述】:我无法弄清楚我的代码有什么问题。我需要帮助。
next(fhr) # skip header row
customer_list = [] # initialize empty customer list
for line in fhr:
ls = line.split(',')
customer_list.append([ls[0], ls[1], ls[2], ls[3], ls[4], ls[5], ls[6], int(ls[7]), ls[8], ls[9], ls[10].strip('\n')])
from operator import itemgetter
customer_list.sort(key=itemgetter(7), reverse=True)
print(customer_list)
writepath = './loan-data-output-v1.csv'
fwh = open(writepath, 'w', encoding='utf-8')
fwh.write('Name' +','+ 'State' +','+'Age' +','+'Annual Income'+','+ 'Loan Type' +','+' Loan Amount' +','+ 'Length of Loan in Years' +','+ 'Days Delinquent' +','+ 'Interest Rate' +','+ 'Number of Loans Prior' +','+'Years as Customer' + '\n')
for i in customer_list:
if customer_list[i][7] >= 90:
fwh.write(customer_list[i][0] + ',' + customer_list[i][1] + ',' + customer_list[i][2] + ',' + customer_list[i][3] + ',' + customer_list[i][4] + ',' + customer_list[i][5] + ',' + customer_list[i][6] + ',' + customer_list[i][7] + ',' + customer_list[i][8] + ',' + customer_list[i][9] + ','+ customer_list[i][10] + '\n')
fhr.close()
fwh.close()
我在最后一个 for 循环中收到此错误,我不知道该怎么办。有人可以帮忙吗。 TypeError: 列表索引必须是整数或切片,而不是列表
【问题讨论】:
见***.com/a/522578/2970853 这能回答你的问题吗? Accessing the index in 'for' loops? 也许你可以试试:for i in range(len(customer_list)): 什么是customer_list
?
【参考方案1】:
您正在使用列表列表,因此当您使用for i in list_of_list
时,i
本身就变成了一个列表..
for i in customer_list:
if i[7] >= '90':
fwh.write(i[0] + ',' + i[1] + ',' + i[2] + ',' + i[3] + ',' + i[4] + ',' + i[5] + ',' + i[6] + ',' + str(i[7]) + ',' + i[8] + ',' + i[9] + ','+ i[10] + '\n')
fhr.close()
fwh.close()
您也可以使用,
for i in range(0,len(customer_list)):
if customer_list[i][7] >= '90':
fwh.write(customer_list[i][0] + ',' + customer_list[i][1] + ',' + customer_list[i][2] + ',' + customer_list[i][3] + ',' + customer_list[i][4] + ',' + customer_list[i][5] + ',' + customer_list[i][6] + ',' + str(customer_list[i][7]) + ',' + customer_list[i][8] + ',' + customer_list[i][9] + ','+ customer_list[i][10] + '\n')
fhr.close()
fwh.close()
编辑:第二种方法假定customer_list
的长度是恒定的,或者换句话说,您在循环期间没有向customer_list
添加任何内容。感谢DanielRoseman
指出第二个代码中的潜在错误..
编辑 2:
感谢quamrana
提出这样的建议,
for i in customer_list:
if i[7] >= '90':
i[7] = str(i[7])
fwh.write(','.join(i[0:11]) + '\n')
fhr.close()
fwh.close()
【讨论】:
不推荐第二个。这几乎从来没有在 Python 中是正确的。 为什么会这样,如果是这样的话,我很高兴在 python 中看到新的东西..:) 因为第一种方式是正确的。始终迭代事物本身,而不是事物的 len 范围。 但是是什么让你认为迭代 len 的东西是不正确的?是否存在任何潜在的错误或效率低下? @DanielRoseman 我想我明白了你的意思,len(thing)
只执行一次,如果我们在循环中添加一些东西到thing
我们不能迭代新添加的东西。我明白了,谢谢你纠正我。:)以上是关于有没有办法解决这个 TypeError的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法解决这个错误:“CloudKit 集成需要不支持有序关系。”