我仍然是python的新用户,并尝试使用python制作最长的普通子序列。但是我想知道如何创建一个循环来首先逐行比较值。这是数据示例。
class Test extends React.Component {
render() {
const name = 'san';
const parsedName = name.replace(new RegExp('san', 'ig'), '<span>span</span>');
return (
<div dangerouslySetInnerHTML={{__html: parsedName}}/>
);
}
}
ReactDOM.render(
<Test/>,
document.getElementById('container')
);
这是我要适应的LCS的示例代码。
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="container">
</div>
我创建了另一个用于压缩LCS的功能
row col1 col2 col3 col4 col5 col6
0 'A' '11' 'B'
1 'A' '11' 'B' '121'
2 'A' '12' 'B' '123' '124'
3 'A' '13' 'B' '123' '124' '456'
但结果为错误->'float'类型的对象没有len()
假设
import pandas as pd
df_hier = pd.read_csv("sample.csv")
row1 = df_hier.iloc[1:2, 2:20]
row2 = df_hier.iloc[3:4, 2:20]
def lcs(s1, s2):
matrix = [["" for x in range(len(s2))] for x in range(len(s1))]
for i in range(len(s1)):
for j in range(len(s2)):
if s1[i] == s2[j]:
if i == 0 or j == 0:
matrix[i][j] = s1[i]
else:
matrix[i][j] = matrix[i-1][j-1] + s1[i]
else:
matrix[i][j] = max(matrix[i-1][j], matrix[i][j-1], key=len)
cs = matrix[-1][-1]
return len(cs), cs
print(lcs(row1, row2))
预期结果将是
(4,'A1B1')
提前谢谢
答案 0 :(得分:1)
关于该错误,您得到的消息是:“类型为'float'的对象没有len()”,因为您试图在NaN上执行函数,在这种情况下,试图将NaN传递给len()。相反,您想要使用函数pd.isnull()/ pd.notnull()检查值是否为NaN。 (使用“ ==”进行比较也不起作用)。
顺便说一句,它不是字符串“ NaN”,而是可以用“ pd.np.nan”提及的特殊对象。
我建议修复以下行:
lcss = [lcs(*x) if pd.notnull(x[0]) and pd.notnull(x[1]) else (0, pd.np.nan) for x in pairs]