比较python中嵌套列表中列表的第一个元素

时间:2014-05-27 06:08:50

标签: python list

我有一个列表如下:

[[a1,a2], [b1,b2],....,  [n1]]

我想知道所有这些列表中的第一个元素是否相等?

6 个答案:

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

解决方案非常简单。

  1. 转置您的列表。使用zip执行此任务
  2. 为转置列表的第一行编制索引
  3. 使用set删除重复的
  4. 确定元素是否等于1

  5. >>> 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