найти первый уникальный элемент в целочисленном списке: python - PullRequest
1 голос
/ 16 июня 2020
def findFirstUnique(lst):
    # Write your code here
    for x in lst:
        print ('x is:{} '.format(x))
        lst.remove(x)
        print lst
        if x not in lst:
            return x

print ('final output is : {}'.format(findFirstUnique(lst)))

По-видимому, в некоторых случаях go проходит, например: [9, 2, 3, 2, 6, 6, 9] А в некоторых других случаях for l oop ведет себя так странно: [4, 5, 1, 2, 0, 4]

и вывод для второго случая:

x is:4  [5, 1, 2, 0, 4] 
x is:1 >>> Why is it not picking "5" as the next value?? [5, 2, 0, 4] final output is : 1

Я как бы теряю его сейчас, когда я не могу понять это для l oop! Любая помощь будет принята с благодарностью.

Ответы [ 4 ]

2 голосов
/ 16 июня 2020

Это другой подход, но он вернет первый уникальный в списке

def findFirstUnique(lst):
    for x in lst:
        if lst.count(x) == 1:
            return x
    return None
1 голос
/ 16 июня 2020

С точки зрения скорости любое решение, которое требует перебора списка для каждого элемента для проверки количества отсчетов (будь то явное l oop или использование lst.count()), будет масштабироваться как O ( n ^ 2) в худшем случае. Если вы начнете с создания словаря счетчиков, а затем используете поиск по словарю для каждого элемента, чтобы проверить его счетчик, то это должно быть не намного хуже, чем O ( n ). Код для получения подсчетов в чистом Python не особенно сложен, но на самом деле collections.Counter в стандартной библиотеке сделает это за нас, поэтому мы также можем использовать это:

from collections import Counter

def findFirstUnique(lst):
    counts = Counter(lst)
    for x in lst:
        if counts[x] == 1:
            return x
    else:
        return None

if __name__ == '__main__':    
    lst = [9,2,3,2,6,6,9]
    print(findFirstUnique(lst))
1 голос
/ 16 июня 2020

Этого должно хватить, это кратко и быстро.

[*filter(lambda x: lst.count(x) == 1, lst)][0]

Данные:

lst = [9, 2, 3, 1, 2, 6, 6, 9]
0 голосов
/ 16 июня 2020

для l oop фактически выполняет итерацию списка, используя индекс элемента (скажем, i). На 2-м l oop, i = 1 , lst = [5, 1, 2, 0, 4] . Итак, текущий элемент равен 1, а не 5. Как правило, вы не должны удалять или вставлять какие-либо элементы во время итерации.

def findFirstUnique(lst):
    for i, x in enumerate(lst):
        print('x is:{} '.format(x))
        print(lst[:i]+lst[i+1:])
        if x not in lst[:i]+lst[i+1:]:
            return x

print(findFirstUnique([4, 5, 1, 2, 0, 4]))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...