我需要一个函数,它接受一个列表并输出True,如果输入列表中的所有元素使用标准相等运算符计算彼此相等,否则输出False。
我觉得最好是遍历列表,比较相邻的元素,然后与所有结果布尔值。但我不知道最python的方法是什么。
我需要一个函数,它接受一个列表并输出True,如果输入列表中的所有元素使用标准相等运算符计算彼此相等,否则输出False。
我觉得最好是遍历列表,比较相邻的元素,然后与所有结果布尔值。但我不知道最python的方法是什么。
当前回答
我最后写了这样一句话
from itertools import starmap, pairwise
all(starmap(eq, (pairwise(x)))
其他回答
你可以:
reduce(and_, (x==yourList[0] for x in yourList), True)
python让你导入operator.and_这样的操作符是相当烦人的。从python3开始,还需要导入functools.reduce。
(您不应该使用此方法,因为如果它发现不相等的值,它不会中断,而是会继续检查整个列表。这里只是作为完整性的回答。)
简单的解决方案是应用set on list
如果所有元素都相同,len将为1,否则大于1
lst = [1,1,1,1,1,1,1,1,1]
len_lst = len(list(set(lst)))
print(len_lst)
1
lst = [1,2,1,1,1,1,1,1,1]
len_lst = len(list(set(lst)))
print(len_lst)
2
>>> a = [1, 2, 3, 4, 5, 6]
>>> z = [(a[x], a[x+1]) for x in range(0, len(a)-1)]
>>> z
[(1, 2), (2, 3), (3, 4), (4, 5), (5, 6)]
# Replacing it with the test
>>> z = [(a[x] == a[x+1]) for x in range(0, len(a)-1)]
>>> z
[False, False, False, False, False]
>>> if False in z : Print "All elements are not equal"
将您的输入转换为一个集:
len(set(the_list)) <= 1
使用set可以删除所有重复的元素。<= 1使它在输入为空时正确地返回True。
这要求输入中的所有元素都是可哈希的。例如,如果传入一个列表的列表,就会得到一个TypeError。
或者使用numpy的diff方法:
import numpy as np
def allthesame(l):
return np.unique(l).shape[0]<=1
并呼吁:
print(allthesame([1,1,1]))
输出:
True