Python:有效地比较列表的第一个元素
在Python中,我有一个名为“list1”的列表,其中包含可变长度的列表 如果add的第一个元素不是list1中任何列表的第一个元素,我想在长列表中添加第二个列表“add” 此代码适用于: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
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])。