Python 类型错误,尽管两个实例都是浮动的

Python 类型错误,尽管两个实例都是浮动的,python,typeerror,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" 运行它会返回: TypeEr

我有一个非常简单的代码,表现得有点不寻常

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'>
更不寻常的是,如果将>替换为acol1=[0.1,0.2,x,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"

因为您正在就地修改列表。这将有助于:

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[:]进行复制。一般来说,我不喜欢这段代码,正是因为你在原地修改它。如果您确定只需要一个这样的元素,那么应该在找到for x=='x'后中断。

尽管两个实例都是浮动的,但显然不是。像col1[lo]=x这样的事情似乎很可疑,不是吗?尝试在失败的行之前添加这样的行:printcol1,lo,hi,col1[lo],col1[hi],但在测试进行时它是一个浮点。就像我说的,如果符号被翻转,代码就会运行。好了,现在我明白了。忘了这是一个循环。干杯,伙计们。在这个例子中只希望有一个这样的元素,但稍后它将包括更多的可能性。