2012-01-14 39 views
22

Tôi có ý tưởng chung về cách thực hiện điều này trong Java, nhưng tôi đang học Python và không chắc chắn cách thực hiện.Bỏ qua mọi phần tử khác sau

Tôi cần triển khai hàm trả về danh sách chứa mọi phần tử khác của danh sách, bắt đầu bằng phần tử đầu tiên.

Như vậy đến nay, tôi có và không chắc chắn làm thế nào để làm từ đây kể từ khi tôi chỉ học cách cho-vòng trong Python là khác nhau:

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

    print b 

Trả lời

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

Slice ký hiệu a[start_index:end_index:step]

return a[::2] 

nơi start_index mặc định là 0end_index mặc định là len(a).

0

Sử dụng cho vòng lặp như bạn có, một cách là thế này:

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

    print b 

j chỉ giữ chuyển đổi giữa 0 và 1 để theo dõi khi nào thì thêm một yếu tố để b.

+0

Tại sao bạn không chỉ đơn giản là sử dụng một boolean như chuyển đổi? Ngoài ra, điều này là unidieak unidiomatic. –

+1

Tôi đã viết nó theo cách này để phản ánh nỗ lực của tác giả. Có, nó không phải là rất giống như python. Chắc chắn, tôi sẽ vui vẻ chỉnh sửa và làm cho nó thành một bool ... – bchurchill

+0

đây là một cách tiếp cận thực sự nghèo xem xét bạn có thể sử dụng danh sách lát – 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

Ngoài ra, bạn có thể làm:

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

Các mở rộng lát ký hiệu nhiều hơn nữa súc tích, mặc dù.

+0

Điều này rất hữu ích cho tôi, nhưng nó khác với ký hiệu slice mở rộng ở chỗ nó cung cấp cho bạn một chỉ mục mà bạn có thể tiếp cận vào mảng ban đầu , thay vì nhận mảng "lọc". Vì vậy, họ có các trường hợp sử dụng khác nhau. –

2

Có nhiều cách hơn một cho da mèo. - 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] 
Các vấn đề liên quan