2012-01-14 13 views
22

Mam ogólny pomysł, jak to zrobić w Javie, ale uczę się Pythona i nie wiem, jak to zrobić.Pomijam każdy inny element po pierwszym

Muszę zaimplementować funkcję, która zwraca listę zawierającą każdy inny element listy, zaczynając od pierwszego elementu.

tej pory mam, ale nie wiem, jak to zrobić tutaj ponieważ jestem po prostu nauczenie for-pętle w Pythonie są różne:

def altElement(a): 
    b = [] 
    for i in a: 
     b.append(a) 

    print b 

Odpowiedz

41
def altElement(a): 
    return a[::2] 
34

Kawałek notacja a[start_index:end_index:step]

return a[::2] 

gdzie start_index domyślne wartości to 0 i end_index domyślnie len(a).

0

Używając pętli for jak masz, jednym ze sposobów jest następująca:

def altElement(a): 
    b = [] 
    j = False 
    for i in a: 
     j = not j 
     if j: 
      b.append(i) 

    print b 

j tylko trzyma przełączania między 0 i 1, aby śledzić, kiedy należy dołączyć element do b.

+0

Dlaczego nie po prostu przy użyciu logiczną jako przełącznik? Jest to również niewypowiedzianie jednoznaczne. –

+1

Napisałem to w ten sposób, aby odzwierciedlić próbę autora. Tak, to nie jest bardzo podobne do Pythona. Pewnie, z przyjemnością edytuję i sprawię, że będzie to ... – bchurchill

+0

To jest naprawdę kiepskie podejście, biorąc pod uwagę, że możesz używać list plasterków – jdi

1
items = range(10) 
print items 
>>> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
print items[1::2] # every other item after the second; slight variation 
>>> [1, 3, 5, 7, 9] 
] 
5

Alternatywnie, można zrobić:

for i in range(0, len(a), 2): 
    #do something 

Przedłużony plaster notacja jest wiele bardziej zwięzłe, choć.

+0

To było dla mnie pomocne, ale różni się od rozszerzonej notacji plastra tym, że daje ci indeks, dzięki któremu możesz wtedy sięgnąć do oryginalnej tablicy , zamiast pobierania tablicy "filtrowanej". Więc mają różne przypadki użycia. –

2

Istnieje więcej niż jeden sposób na skórę kota. - Seba Smith

arr = list(range(10)) # Range from 0-9 

# List comprehension: Range with conditional 
print [arr[index] for index in range(len(arr)) if index % 2 == 0] 

# List comprehension: Range with step 
print [arr[index] for index in range(0, len(arr), 2)] 

# List comprehension: Enumerate with conditional 
print [item for index, item in enumerate(arr) if index % 2 == 0] 

# List filter: Index in range 
print filter(lambda index: index % 2 == 0, range(len(arr))) 

# Extended slice 
print arr[::2] 
Powiązane problemy