如何在没有重复的列表中找到第一个值?

Abh*_*mar 5 python list python-3.x

l1 = ['A','B','C','D','A','B']
l2 = []
Run Code Online (Sandbox Code Playgroud)

'C'是列表l1中的第一个值,我想创建一个函数,以便它在l2中返回C.

Sha*_*ger 10

在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)]
Run Code Online (Sandbox Code Playgroud)

工作是严格的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 ...
Run Code Online (Sandbox Code Playgroud)

或者避免使用异常处理itertools.islice(l20-1个项目,一旦找到命中,它仍然会短路):

from itertools import islice

l2 = list(islice((k for k, v in Counter(l1).items() if v == 1), 1))
Run Code Online (Sandbox Code Playgroud)


Suf*_*ori 1

您可以使用字符串的函数转换并list比较string左右index每个字符。一旦找到第一个匹配项,它就会停止计数,findrfind

l1 = ['A','B','C','D','A','B']

def i_list(input):
    l1 = ''.join(input)
    for i in l1:
        if l1.find(i) == l1.rfind(i):
            return(i)


print(i_list(l1))

# output
C
Run Code Online (Sandbox Code Playgroud)