Python:有效地比较列表的第一个元素

Python:有效地比较列表的第一个元素,python,list,compare,append,Python,List,Compare,Append,在Python中,我有一个名为“list1”的列表,其中包含可变长度的列表 如果add的第一个元素不是list1中任何列表的第一个元素,我想在长列表中添加第二个列表“add” 此代码适用于: list1 = [["a", 5, 9, 22], ["b", 10, 1], ["c"], ["d", 42]] add = ["e", 1, 31] add2 = ["b", 1, 31] temp = [] for e in list1: temp.append(e[0]) if add

在Python中,我有一个名为“list1”的列表,其中包含可变长度的列表

如果add的第一个元素不是list1中任何列表的第一个元素,我想在长列表中添加第二个列表“add”

此代码适用于:

list1 = [["a", 5, 9, 22], ["b", 10, 1], ["c"], ["d", 42]]

add = ["e", 1, 31]
add2 = ["b", 1, 31]

temp = []
for e in list1:
    temp.append(e[0])

if add[0] not in temp:
    list1.append(add)
正如预期的那样,将add ist添加到列表1中,而不会添加add2


但是,我想知道是否有一种更优雅、更有效的方法可以避免创建临时列表。

您可以使用
all()
和生成器表达式进行测试:

if any(add[0] != elem[0] for elem in list1):
    list1.append(add)

all()
函数在包含的生成器表达式测试上循环,它只包含
True
值,但如果遇到
False
(其中
add[0]
等于
elem[0]
),它将停止。这就省去了遍历所有
列表1
以确定
元素[0]
是否已经存在的麻烦。

您可以使用
all()
和生成器表达式进行测试:

if any(add[0] != elem[0] for elem in list1):
    list1.append(add)

all()
函数在包含的生成器表达式测试上循环,它只包含
True
值,但如果遇到
False
(其中
add[0]
等于
elem[0]
),它将停止。这就省去了遍历所有
list1
以确定
elem[0]
是否已经存在的麻烦。

我想他们实际上想要
if all(add[0]!=elem[0])…
@thg435:Uhm,是的,的确如此。颠倒了我的逻辑,更正了。可能值得一提的是,如果涉及的任何列表都是空的,这将被打破。如果您的数据可以这样做,您可以在生成器表达式中添加一个过滤器:
If all(在列表1 If elem中为elem添加[0]!=elem[0])。
我想他们实际上想要
If all(添加[0]!=elem[0])…
@thg435:Uhm,是的,确实如此。颠倒了我的逻辑,更正了。可能值得一提的是,如果涉及的任何列表都是空的,这将被打破。如果您的数据可以这样做,您可以在生成器表达式中添加一个筛选器:
If all(为列表1中的elem添加[0]!=elem[0])。