python读错类型

时间:2012-08-17 22:09:10

标签: python python-2.7 types

我有一个包含数字行的文本文件。我的程序试图提取代码行并将它们放在一个列表中,每个列表由组成文件中该行的数字组成,然后将所有这些列表放入一个列表(让我们调用)这个Triangle)并且有一个应用于它们的函数,但Python解释器说当我尝试使用它时Triangle[x]是一个整数类型,但当我问它时type(Triangle[x]) ,它说这是一个清单。我的代码如下:

def compare(a,b):
"""Returns the larger of a and b"""
if a > b:
    return a
else:
    return b

doc = open('C:/Users/Joseph/My Documents/Programming fun/Python/Project Euler/18triangle.txt')

Triangle = []

for line in doc:
    Triangle.append( map( int, line.split() ) )

doc.close()

Triangle.reverse()

for i in xrange(len(Triangle) - 1):
    for j in xrange(len(Triangle[i]) - 1):              # Here it says that 'type int has no len'
        TEMP = compare(Triangle[i][j],Triangle[i][j + 1])
        Triangle[i+1] = TEMP

提前感谢您提供任何建议。

3 个答案:

答案 0 :(得分:4)

这看起来很可疑:

TEMP = compare(Triangle[i][j],Triangle[i][j + 1])
Triangle[i+1] = TEMP

Triangle以整数列表作为成员开始,但是当你完成时,你将元素指定为整数。实际上,对于Triangle[0]以外的每个元素都会发生这种情况,因此只要i到达1,就会发生这种情况。


顺便说一句,这是阅读文档的一种更好的方式:

with open('C:/Users/Joseph/My Documents/Programming fun/Python/Project Euler/18triangle.txt') as doc:
    Triangle = [map(int, line.split()) for line in doc]

您的compare函数是标准max函数的子集;你可以改用它(正如评论中@BrendenBrown所指出的那样)。

此外,根据standard Python styleTriangle应为triangle

答案 1 :(得分:1)

问题是TEMP得到一个整数,然后你把它放到Triangle中,所以现在Triangle有一个整数而不是列表的元素。也许你想要像

这样的东西
Triangle[i+1] = [TEMP]

而不是

Triangle[i+1] = TEMP

答案 2 :(得分:1)

for i in xrange(len(Triangle) - 1)这不是非常pythonic。

由于您想一次比较两个对象,首先调整列表可能会更好。此代码段会将您的列表转换为2元组列表

>>> from itertools import izip_longest, islice
>>> x
[1, 2, 3, 4, 5]
>>> list(izip_longest(islice(x,0,None,2),islice(x,1,None,2)))
[(1, 2), (3, 4), (5, None)]

获得该格式的列表后,您可以像这样单步执行:

for i,j in two_list:
   # rest of your loop