l1 = ['A','B','C','D','A','B']
l2 = []
'C' 是列表 l1 中的第一个值,我想创建一个函数,以便它在 l2 中返回 C。
最佳答案
在 3.6 及更高版本中,这非常很容易。现在 dict
保留了插入顺序,collections.Counter
可用于在一次传递中有效地计算所有 元素,然后您只需扫描生成的 Counter
以便找到计数为 1 的第一个元素:
from collections import Counter
l1 = ['A','B','C','D','A','B']
l2 = [next(k for k, v in Counter(l1).items() if v == 1)]
工作是严格的 O(n)
,只需要输入一次(加上 Counter
本身的唯一值的部分传递),并且代码非常简单。在现代 Python 中,Counter
甚至有一个用于计算输入的 C 加速器,它将所有 Counter
的构建工作推到 C 层,使其无可匹敌。如果您想考虑不存在此类元素的可能性,只需包装 l2
初始化即可:
try:
l2 = [next(k for k, v in Counter(l1).items() if v == 1)]
except StopIteration:
l2 = []
# ... whatever else makes sense for your scenario ...
或者用itertools.islice
避免异常处理(所以l2
是0-1项,一旦找到命中它仍然会短路):
from itertools import islice
l2 = list(islice((k for k, v in Counter(l1).items() if v == 1), 1))
关于python - 如何在没有重复项的列表中找到第一个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53201823/