我有一个列表如下:
[[a1,a2], [b1,b2],...., [n1]]
我想知道所有这些列表中的第一个元素是否相等?
答案 0 :(得分:2)
为了便于阅读,我宁愿用列表理解来做这件事,除非有理由避免它。
list_of_lists = [[1, 2], [1, 3], [1, 4]]
len(set([sublist[0] for sublist in list_of_lists])) == 1
# True
答案 1 :(得分:2)
解决方案非常简单。
zip
执行此任务>>> test = [[1, 2], [1, 3], [1, 4]]
>>> len(set(zip(*test)[0])) == 1
True
注意强>
如果您使用Py 3.X而不是切片,请使用zip
将呼叫包裹到next
>>> len(set(next(zip(*test)))) == 1
答案 2 :(得分:1)
怎么样?
>>> from operator import itemgetter
>>> test = [[1, 2], [1, 3], [1, 4]]
>>> len(set(map(itemgetter(0), test))) == 1
True
>>> test.append([2, 5])
>>> test
[[1, 2], [1, 3], [1, 4], [2, 5]]
>>> len(set(map(itemgetter(0), test))) == 1
False
另一种方式是(谢谢,Peter DeGlopper!)
all(sublist[0] == test[0][0] for sublist in test)
这个版本也会短路,所以不需要检查每个元素。
答案 3 :(得分:0)
您可以创建与第一个子列表的第一个元素相比的第一个元素列表:
False not in [len(yourList[0])>0 and len(x)>0 and x[0] == yourList[0][0] for x in yourList]
答案 4 :(得分:0)
有一个班轮:
>>> sample = [[1, 2], [1, 3], [1, 4]]
>>> reduce(lambda x, y: x if x == y[0] else None, sample, sample[0][0])
1
>>> sample = [[0, 2], [1, 3], [1, 4]]
>>> reduce(lambda x, y: x if x == y[0] else None, sample, sample[0][0])
None
答案 5 :(得分:-1)
试试这个......
>>> test = [[1, 2], [1, 3], [1, 4]]
>>> eval("==".join(map(lambda x: str(x[0]), test)))
True