我有一个像这样的小算法。
我用python
编写了它import pandas as pd
raw = pd.read_csv
i = 0
T = pd.DataFrame(columns = ['Values'])
singleT = raw.mean() + raw.std()
T = T.append(singleT, ignore_index=True)
if i == 0:
raw = raw.where(raw<T.iloc[i,:])
i += 1
while True:
singleT = raw.mean() + raw.std()
T = T.append(singleT, ignore_index=True)
if T.iloc[i,:].values == T.iloc[i-1,:].values:
break
background = T.iloc[i,:].values
else:
raw = raw.where(raw<T.iloc[i,:])
i += 1
print ('iteration{:02}'.format(i))
然而,循环没有得到传递i = 1并且继续重复,当i = 1时整个T数组都填充了值。我对我的代码进行了几次修改但是它们根本不起作用。 / p>
如何解决此问题的任何建议将不胜感激! 非常感谢你
编辑:我已为最后4行添加了一个标签,因为你们建议确保else
属于while
,但现在它的语法无效错误
Edit2:这是这个问题的正确代码,它不会进入无限循环。
i = 0
T = pd.DataFrame(columns = ['Pulse counts'])
singleT = raw.mean() + raw.std()
T = T.append(singleT, ignore_index=True)
if i == 0:
filtered = raw.where(raw<T.iloc[i,:])
i += 1
while True:
singleT = filtered.mean() + filtered.std()
T = T.append(singleT, ignore_index=True)
if T.iloc[i,:].values == T.iloc[i-1,:].values or T.iloc[i-1,:].values == 0:
background = T.iloc[i-1,:].values
break
else:
filtered = filtered.where(filtered<T.iloc[i,:])
print ('iteration{}'.format(i))
i += 1
答案 0 :(得分:1)
如果您的缩进正确,else
部分:
else:
raw = raw.where(raw<T.iloc[i,:])
i += 1
print ('iteration{:02}'.format(i))
不属于if
,而属于while
,它具有不同的含义:仅当循环结束时没有break
(不太知名的特征,也是与for
一起使用,无需在达到break
时定义标记
所以i
永远不会增加:无限循环。
答案 1 :(得分:1)
尝试这种方式:
gradle