带有列表的if语句在同一列表中的for循环中

时间:2018-04-01 20:43:15

标签: python pandas for-loop if-statement dataframe

我在列表中追加所有对的相似性分数。

data = []

for i1, i2 in list: 
    data.append([i1, i2, cosine_similarity([X[df.index.get_loc(i1)]],[X[df.index.get_loc(i2)]]).ravel()[0]])

但是,我需要它只附加非零的分数。

我输入了一个if语句,但它产生了一个错误,因为它不是int类型。

for i1, i2 in list:
    if [cosine_similarity([X[df.index.get_loc(i1)]], [X[df.index.get_loc(i2)]])] > 0:
        data.append([i1, i2, cosine_similarity([X[df.index.get_loc(i1)]], [X[df.index.get_loc(i2)]]).ravel()[0]])

任何方式只能在迭代过程中只附加非零?

1 个答案:

答案 0 :(得分:0)

条件迭代的一般模式是(a for a in b if a)。为了便于阅读,将计算结果转换为辅助函数,这应该可行:

def calc_sim(X, df, i1, i2):
    return cosine_similarity([X[df.index.get_loc(i1)]], 
        [X[df.index.get_loc(i2)]])

data = [(i1, i2, sim) 
    for (i1, i2, sim) in ((i1, i2, calc_sim(X, df, i1, i2)) 
    if sim > 0]