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
答案 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