Python: 有效比较列表的第一个元素
在Python中,我有一个叫“list1”的列表,这个列表里面包含了长度不一的子列表。
我想把第二个列表“add”添加到这个长列表中,前提是“add”的第一个元素不能和“list1”中任何子列表的第一个元素相同。
这段代码可以实现这个功能:
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”被添加到了“list1”中,而“add2”则不会被添加。
不过,我在想有没有更优雅、更有效的方法来实现这个功能,而不需要创建一个临时的列表。
1 个回答
1
你可以用 all()
函数和一个生成器表达式来测试一下:
if any(add[0] != elem[0] for elem in list1):
list1.append(add)
all()
函数会遍历生成器表达式,检查里面的值是否全是 True
。如果遇到一个 False
的值(比如 add[0]
和 elem[0]
相等),它就会停止。这种方法省去了遍历整个 list1 的过程,直接判断 elem[0]
是否已经存在。