Omijanie elementów listy

Omijanie elementów listy
Szymon Oryńczak
  • Rejestracja: dni
  • Ostatnio: dni
  • 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: dni
  • Ostatnio: dni
  • 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
  • Rejestracja: dni
  • Ostatnio: dni
2
Kopiuj
sorted(list(set(items) - set(items[2::][::4])))

albo:

Kopiuj
[el for el in items if el not in items[2::][::4]]
WeiXiao
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 5226
1
Kopiuj
def calc(x):
    return 1.3382 * x - 1.3750;

for i in range(1 , 17):
    print(round(calc(i)))
AN
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 988
2
Kopiuj
[number for index, number in enumerate(items, 2) if index % 4]
Spine
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 6965
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?

Spine
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 6965
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.

Spearhead
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1007
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: dni
  • Ostatnio: dni
  • Postów: 988
1
Kopiuj
del items[2::4]
Ziggy Witkowski
  • Rejestracja: dni
  • Ostatnio: dni
  • 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.