尽管两个实例都是浮点数,但输入错误

时间:2018-03-07 22:44:08

标签: python typeerror

我有一个非常简单的代码,有点不寻常。

col1=[0.1,0.2,"x",0.3,0.1]


for x in col1:
    if x=="x":
        lo=col1.index("x")-1
        hi=col1.index("x")+1
        if col1[lo]>col1[hi]:
            col1[lo]="x"
        else:
            col1[hi]="x"

运行它会返回:

TypeError: '>' not supported between instances of 'float' and 'str'

尽管如此:

col1=[0.1,0.2,"x",0.3,0.1]
lo=col1.index("x")-1
hi=col1.index("x")+1

print(lo)
print(hi)

print(col1[lo])
print(col1[hi])

print(type(col1[lo]))
print(type(col1[hi]))

返回:

1
3
0.2
0.3
<class 'float'>
<class 'float'>

更不寻常的是,如果你将>换成<,那么代码功能就好了,尽管与我想要的相反。

知道这里发生了什么吗?

编辑: 感谢您的评论。现在已经发现了问题。 是一个愚蠢的错误,但让我困惑。

2 个答案:

答案 0 :(得分:0)

COL1 = [0.1,0.2, “×”,0.3,0.1] 问题是您在使用它时正在写入列表。做:

col1=[0.1,0.2,"x",0.3,0.1]

newcol=col1[:]
for x in col1:
    if x=="x":
        lo=col1.index("x")-1
        hi=col1.index("x")+1
        if col1[lo]>col1[hi]:
            newcol[lo]="x"
        else:
            newcol[hi]="x"

答案 1 :(得分:0)

因为您正在修改列表。这将有效:

col1=[0.1,0.2,"x",0.3,0.1]
for x in col1[:]:
    if x=="x":
        lo=col1.index("x")-1
        hi=col1.index("x")+1
        if col1[lo]>col1[hi]:
            col1[lo]="x"
        else:
            col1[hi]="x"

注意我在for循环中复制了col1,并将其用作col1[:]。一般来说,我不喜欢这段代码,完全是因为您正在修改它。你找到x=='x'之后应该中断,如果你确定你只期待一个这样的元素。