我有一个非常简单的代码,有点不寻常。
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'>
更不寻常的是,如果你将>
换成<
,那么代码功能就好了,尽管与我想要的相反。
知道这里发生了什么吗?
编辑: 感谢您的评论。现在已经发现了问题。 是一个愚蠢的错误,但让我困惑。
答案 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'
之后应该中断,如果你确定你只期待一个这样的元素。