如何知道python中2个列表中相同索引处的值是正面还是负面相同?

时间:2017-02-18 03:39:11

标签: python

2个长度相同的列表,都是float或int类型,正数或负数,不可能为零。我只想知道同一索引中的所有值是否具有相同的方向(正面或负面)。这是逻辑,还有更好的方法吗?

def same_direction(list1, list2):
    diff = []
    for i in len(list1):
        if (list1[i] > 0 and list2[i] > 0) or (list1[i]< 0 and list2[i] < 0):
            pass
        else:
            diff.append(i)
    if diff:
        return False
    return True

same_direction([1, 2, 3], [3, 7, 9]) True
same_direction([-1, 2, 3], [1, 2, 3]) False

2 个答案:

答案 0 :(得分:7)

您可以zip列出配对数字的列表,并检查每个配对是否有相同的符号。上面的all包裹,只要找到False值就会终止:

def same_direction(l1, l2):
    return all((x > 0) == (y > 0) for x, y in zip(l1, l2))

print(same_direction([1, 2, 3], [3, 7, 9]))
print(same_direction([-1, 2, 3], [1, 2, 3]))
print(same_direction([-1, 2, 3], [-1, 2, 3]))

输出:

True
False
True

或者你可以将这些对相乘并检查结果是否大于0:

def same_direction(l1, l2):
    return all(x * y > 0 for x, y in zip(l1, l2))

答案 1 :(得分:3)

从代码开始,您可以通过短路和使用xor

来节省一些时间
def same_direction(list1, list2):

    for i in len(list1):
        if (list1[i] > 0) ^ (list2[i] > 0):
            return False
    return True

Python纯粹主义者会告诉你应该避免索引

def same_direction(list1, list2):

    for l1, l2 in zip(list1, list2):
        if (l1 > 0) ^ (l2 > 0):
            return False
    return True