Omijanie elementów listy

Omijanie elementów listy
Szymon Oryńczak
  • Rejestracja:około 6 lat
  • Ostatnio:prawie 6 lat
  • Postów:6
0

Witam, szukam sposobu na otrzymanie elementów listy w taki sposób, jaki przedstawiłem poniżej.

Kopiuj
items = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
# potrzebny output 0, 1, 3, 4, 5, 7, 8, 9, 11, 12, 13, 15, 16, 17, 19, 20]

Jak widać, po pierwszym (licząc od zerowego) elemencie tabeli co trzeci element jest omijany. Z góry dziękuję za odpowiedz.

Yukiteru Gromadzki
  • Rejestracja:ponad 6 lat
  • Ostatnio:ponad rok
  • Postów:192
0

Coś takiego?

Kopiuj
def get(array):
	result = []
	m = 2
	c = 0
	for i in array:
		if c < m:
			c = c+1
			result.append(i)
		else:
			c = 0
	return result


array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
print(get(array))
Pyxis
Ucina liczbę 20, poza tym nie jest to pythonic rozwiązanie.
Pyxis
  • Rejestracja:ponad 7 lat
  • Ostatnio:około 3 godziny
2
Kopiuj
sorted(list(set(items) - set(items[2::][::4])))

albo:

Kopiuj
[el for el in items if el not in items[2::][::4]]
Zobacz pozostały 1 komentarz
Pyxis
Tylko pierwszy przypadek nie jest odporny na duplikaty. Drugi już jest w porządku.
AN
No nie bardzo. Sprawdzasz czy elementu nie ma w liście składającej się z co pierwszego i drugiego elementu. A co jak trzeci element jest też w tej liśćie? Np. lista [1, 1, 1, 1, 1, 2, 3, 4]
Pyxis
Faktycznie. Dzięki :)
Akihito
@anonimowy: autor prosil o ominiecie co 3 elementu a nie o usuwanie również duplikatow tego elementu ;)
AN
@Akihito no to właśnie napisałem
WeiXiao
  • Rejestracja:około 9 lat
  • Ostatnio:około 2 godziny
  • Postów:5143
1
Kopiuj
def calc(x):
    return 1.3382 * x - 1.3750;

for i in range(1 , 17):
    print(round(calc(i)))
edytowany 3x, ostatnio: WeiXiao
AN
  • Rejestracja:prawie 11 lat
  • Ostatnio:około 3 godziny
  • Postów:973
2
Kopiuj
[number for index, number in enumerate(items, 2) if index % 4]

Zdalna praca dla Senior Python Developerów --> PW
Szymon Oryńczak
Dokładnie to, o co chodziło. Wielkie dzięki, miłego dnia.
Spine
  • Rejestracja:około 22 lata
  • Ostatnio:minuta
  • Postów:6692
1
Szymon Oryńczak napisał(a):

Witam, szukam sposobu na otrzymanie elementów listy w taki sposób, jaki przedstawiłem poniżej.

Kopiuj
items = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
# potrzebny output 0, 1, 3, 4, 5, 7, 8, 9, 11, 12, 13, 15, 16, 17, 19, 20]

Jak widać, po pierwszym (licząc od zerowego) elemencie tabeli co trzeci element jest omijany. Z góry dziękuję za odpowiedz.

Czy jesteś pewien, że Twój output jest poprawny?
Pierwsza trójka ok:
Masz 0 1 2, wywalamy 2, zostaje 0 1.

Druga trójka źle:
Masz 3 4 5, wywalamy 5, powinno zostać 3 4, więc co po tych cyfrach robi 5 w Twoim outpucie?


🕹️⌨️🖥️🖱️🎮
edytowany 1x, ostatnio: Spine
Spine
  • Rejestracja:około 22 lata
  • Ostatnio:minuta
  • Postów:6692
0

Jeśli kolejność elementów jest dowolna, albo elementy mają być posortowany, proponuję:

Kopiuj
print (sorted(items[0::3] + items[1::3]))

Jeśli kolejność ma zostać zachowana, to można jeszcze kombinować z zip'em:

Kopiuj
result = []

for a, b in zip (items[0::3], items[1::3]):
	result += [a,b]
	
print (result)

Tylko trzeba by jeszcze jakoś dodatkowo obsłużyć tablice z nieparzystą ilością elementów.


🕹️⌨️🖥️🖱️🎮
edytowany 2x, ostatnio: Spine
Szymon Oryńczak
Moja prośba została już rozwiązana w kodzie: [number for index, number in enumerate(items, 2) if index % 4]. Natomiast słusznie zauważyłeś, że chodziło o co czwarty element listy, zaczynając od wykluczenia drugiego elementu.
Spine
Wiem, że zaakceptowałeś już odpowiedź, ale tu jak na stacku, każdy chciałby się wykazać inniejszym rozwiązaniem (patrz na dole :) )
Spearhead
  • Rejestracja:prawie 6 lat
  • Ostatnio:około godziny
  • Postów:1002
5
Kopiuj
>>> from itertools import cycle, compress
>>> items = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
>>> list(compress(items, cycle([True, True, False, True])))
[0, 1, 3, 4, 5, 7, 8, 9, 11, 12, 13, 15, 16, 17, 19, 20]
AN
  • Rejestracja:prawie 11 lat
  • Ostatnio:około 3 godziny
  • Postów:973
1
Kopiuj
del items[2::4]

Zdalna praca dla Senior Python Developerów --> PW
Ziggy Witkowski
  • Rejestracja:prawie 6 lat
  • Ostatnio:prawie 6 lat
  • Postów:1
0

Prosto mozna to uzyskac w petli for:

Kopiuj
liczby = [ 0,1,2,3,4,5,6,7,8,9,10]
count = 0


for liczba in liczby:
    count = count +1
    if count == 3:
        count = 0
    else:
        print (liczba)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.