Omijanie elementów listy

Odpowiedz Nowy wątek
2019-06-20 15:25
0

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

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.

Pozostało 580 znaków

2019-06-20 15:45
0

Coś takiego?

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))

"Jestem nadzieją umęczonych. Jestem śmiercią. Jam jest jerzyk."
Ucina liczbę 20, poza tym nie jest to pythonic rozwiązanie. - Pyxis 2019-06-20 15:52

Pozostało 580 znaków

2019-06-20 15:50
2
sorted(list(set(items) - set(items[2::][::4])))

albo:

[el for el in items if el not in items[2::][::4]]
Nieefektywne oraz przy innych i nie odporny na np. duplikaty - anonimowy 2019-06-20 18:10
Tylko pierwszy przypadek nie jest odporny na duplikaty. Drugi już jest w porządku. - Pyxis 2019-06-20 18:15
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] - anonimowy 2019-06-20 18:19
Faktycznie. Dzięki :) - Pyxis 2019-06-20 18:43
@anonimowy: autor prosil o ominiecie co 3 elementu a nie o usuwanie również duplikatow tego elementu ;) - Akihito 2019-06-25 14:48
@Akihito no to właśnie napisałem - anonimowy 2019-06-25 18:12

Pozostało 580 znaków

2019-06-20 15:58
1
def calc(x):
    return 1.3382 * x - 1.3750;

for i in range(1 , 17):
    print(round(calc(i)))
edytowany 3x, ostatnio: WeiXiao, 2019-06-20 16:00

Pozostało 580 znaków

2019-06-20 16:24
[number for index, number in enumerate(items, 2) if index % 4]
Dokładnie to, o co chodziło. Wielkie dzięki, miłego dnia. - Szymon Oryńczak 2019-06-20 16:54

Pozostało 580 znaków

2019-06-20 20:22
1
Szymon Oryńczak napisał(a):

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

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, 2019-06-20 20:23

Pozostało 580 znaków

2019-06-20 20:54
0

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

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

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

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, 2019-06-20 20:56
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. - Szymon Oryńczak 2019-06-21 10:17
Wiem, że zaakceptowałeś już odpowiedź, ale tu jak na stacku, każdy chciałby się wykazać inniejszym rozwiązaniem (patrz na dole :) ) - Spine 2019-06-21 11:51

Pozostało 580 znaków

2019-06-21 10:51
5
>>> 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]

Pozostało 580 znaków

2019-06-21 13:44
1
del items[2::4]

Pozostało 580 znaków

2019-06-25 14:38
0

Prosto mozna to uzyskac w petli for:

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)

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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