2012-01-14 2 views
22

У меня есть общее представление о том, как это сделать в Java, но я изучаю Python и не знаю, как это сделать.Пропуск каждого другого элемента после первого

Мне нужно реализовать функцию, которая возвращает список, содержащий все остальные элементы списка, начиная с первого элемента.

До сих пор, я и не знаю, как это сделать здесь, так как я только учусь, как для-циклов в Python различны:

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

    print b 

ответ

34

Кусочек нотация a[start_index:end_index:step]

return a[::2] 

где start_index по умолчанию - 0 и end_index по умолчанию - len(a).

0

Используя для цикла, как у вас есть, один из способов заключается в следующем:

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

    print b 

J просто держит переключение между 0 и 1, чтобы отслеживать, когда для добавления элемента Ь.

+0

Почему вы не просто использовать логическое значение, как пуговица? Кроме того, это невыразимо унииоматично. –

+1

Я написал это таким образом, чтобы отразить попытку автора. Да, это не очень похоже на python. Конечно, я с удовольствием отредактирую и сделаю это bool ... – bchurchill

+0

это очень плохой подход, учитывая, что вы можете использовать список фрагментов – 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

В качестве альтернативы, вы можете сделать:

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

Удлиненный ломтик обозначения является гораздо более кратким, хотя.

+0

Это было полезно для меня, но оно отличается от расширенной нотации фрагмента тем, что оно дает вам индекс, с помощью которого вы можете затем перейти в исходный массив , вместо получения «фильтрованного» массива. Таким образом, у них есть разные варианты использования. –

2

Есть более чем один кожи кошки. - Seba Смит

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] 
Смежные вопросы