Przerwanie pętli for nie stosując break - jak?

0

Witajcie,

nie mogę przedstawić całego kodu, jednak postaram się przedstawić na jakim rezultacie mi zależy.
Otóż jest lista, którą muszę iterować pętlą for. W liście znajdują się elementy, które się powtarzają.
Jak wyłuskać za pomocą for pierwszy występujący na liście element, nie stosując przy tym
instrukcji break?

Będę wdzięczny za okazaną pomoc.

0

Pierwszy występujący na liście element, kropka; czy pierwszy który się powtarza? Jesteś przyspawany do tej pętli for, czy chcesz po prostu dobre rozwiązanie?

0

Chcę uzyskać jeden - pierwszy z powtarzających się kilku elementów.
np pragnę uzyskać `a' gdy lista = ['a', 'b', 'c', 'a', 'd', 'e', 'a']

Raczej jestem jak to nazywasz przyspawany do fora z uwagi na istotę działania programu i również szykowność.
Łączę pythona z gtk3 pod linuksem.

Chętnie jednak zobaczę również inne rozwiązania, może będą dla mnie inspiracją.

1

pętla for iteruje do czasu aż dostanie wyjątek StopIteration. Taki tam prosty przykład:

def get_only_first(lista):
    yield lista[0]

mylist = [1,2,3,4,5]
mylist1st = get_only_first(mylist)

for i in mylist1st:
    print(f'list[..]={i}')
1

Jasne. Normalne rozwiązanie jest z break-iem lub pętlą while i zbiorem wartości, coś na tę modłę:

unique_values = set()

for x in list:
	if x in unique_values:
		first_duplicate = x
		break
	unique_values.add(x)

(while podobnie — while not first_duplicate is None czy coś takiego)

Rozwiązanie udziwniane wykorzystać może collections.Counter lub ogólny słownik:

from collections import Counter

repetition_counter = Counter()

for x in list:
	repetition_counter[x] += 1

i stąd sobie możesz odfiltrować co chcesz.

0

Dzięki Panowie.

3

Z użyciem podstawowych narzędzi:

next(iter([el for i, el in enumerate(lista) if el in lista[:i] + lista[i+1:]]))

Zgarnia zawsze pierwszy pojawiający się duplikat na liście.

EDIT:
Lub równoważnie:

[el for i, el in enumerate(lista) if el in lista[:i] + lista[i+1:]][0]
1
l = [1,2,3,4,5, 4]
duplicates = (x for x in l if l.count(x) > 1)
print(next(duplicates))

https://ideone.com/nFT1Py

0

MarekR22 - dzięki.
Podpowiedz tylko jak stosować tą konstrukcję ze stringiem?

1 użytkowników online, w tym zalogowanych: 0, gości: 1