【问题标题】:Value comparison价值比较
【发布时间】:2016-02-20 23:12:32
【问题描述】:

我想根据数值比较给一个标签。但是,标签最终不是真的。

有人可以帮我吗?

labels = []
for x,y in zip(multiply_nonspam_test, multiply_spam_test):
    if x > y:
        label = 0
        labels.append(label)
    elif x == y:
        label = 2
        labels.append(label)
    elif x < y:
        label = 1
        labels.append(label)

print labels

multiply_nonspam_test: [-0.0, -5.5014525551182665, -0.0, -0.0, -0.0, -0.0, -20.347159201740993, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -5.403260528939053, -0.0, -0.0, -9.239122173401634, -0.0, -0.0, -0.0]

multiply_spam_test: [-0.0, -4.564151631270644, -0.0, -0.0, -0.0, -0.0, -13.658061604139832, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -5.322256708105361]

标签结果(不正确):

[1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1..]

【问题讨论】:

  • 为我工作。只需复制并粘贴您的代码即可:打印标签 [2, 1, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1] 很难说正是从查看您的结果来看问题出在哪里。可能单独尝试每个标签检查以解决问题。
  • 在比较浮点数是否相等时要小心小错误。您可能希望实现一个“大致相等”比较,该比较仅对一定数量的数字强制相等。
  • 您的代码运行良好。您一定使用了不同的列表。

标签: python python-2.7 compare python-2.x


【解决方案1】:

您的程序实际上运行良好。不知何故,你一定给了它错误的列表。我为你创建了一个小函数来显示这个。

# Your original lists
list1 = [-0.0, -5.5014525551182665, -0.0, -0.0, -0.0, -0.0, -20.347159201740993, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -5.403260528939053, -0.0, -0.0, -9.239122173401634, -0.0, -0.0, -0.0]
list2 = [-0.0, -4.564151631270644, -0.0, -0.0, -0.0, -0.0, -13.658061604139832, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -5.322256708105361]


def compare_lists(list1, list2):
    labels = []
    for x, y in zip(list1, list2):
        if x > y:
            label = 0
            labels.append(label)
        elif x == y:
            label = 2
            labels.append(label)
        elif x < y:
            label = 1
            labels.append(label)

    return labels

# Output [2, 1, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1]
print compare_lists(list1, list2)

【讨论】:

    【解决方案2】:

    我在 Mac OSX 上使用 Python 3.5.1 进行了尝试:

    multiply_nonspam_test = [-0.0, -5.5014525551182665, -0.0, -0.0, -0.0, -0.0, -20.347159201740993, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -5.403260528939053, -0.0, -0.0, -9.239122173401634, -0.0, -0.0, -0.0]
    multiply_spam_test = [-0.0, -4.564151631270644, -0.0, -0.0, -0.0, -0.0, -13.658061604139832, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -5.322256708105361]
    
    labels = []
    for x,y in zip(multiply_nonspam_test, multiply_spam_test):
        if x > y:
            labels.append(0)
        elif x == y:
            labels.append(2)
        elif x < y:
            labels.append(1)
    
    print(labels)
    

    得到了这个结果:

    [2, 1, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-18
      • 2013-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多