2012-01-14 39 views
22

我对如何在Java中执行此操作有一般的想法,但我正在学习Python并且不知道如何执行此操作。在第一个之后跳过其他所有元素

我需要实现一个函数,该函数返回一个包含列表中每个其他元素的列表,从第一个元素开始。

到目前为止,我已经不知道如何从这里做,因为我只是在学习如何for循环Python中是不同的:

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

    print b 

回答

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

切片符号a[start_index:end_index:step]

return a[::2] 

其中start_index默认为0end_index默认为len(a)

0

使用for循环像你这样,一个办法是这样的:

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

    print b 

Ĵ只是让0和1之间并切换到跟踪时,追加一个元素为b。

+0

你为什么不干脆用一个布尔值的切换?此外,这是无法言喻的单一性。 – 2012-01-14 22:35:17

+1

我以这种方式写作,以反映作者的尝试。是的,这不是很像蟒蛇。当然,我会愉快地编辑并使其成为一个布尔... – bchurchill 2012-01-14 22:36:37

+0

考虑到你可以使用列表片 – jdi 2012-01-14 22:37:27

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

这对我很有帮助,但它与扩展切片符号不同之处在于它为您提供了一个索引,您可以使用该索引进入原始数组,而不是获得“过滤”数组。所以他们确实有不同的用例。 – 2015-12-11 11:43:32

2

有更多的方法不止一个到皮肤猫。 - 西巴史密斯

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] 
相关问题