我对如何在Java中执行此操作有一般的想法,但我正在学习Python并且不知道如何执行此操作。在第一个之后跳过其他所有元素
我需要实现一个函数,该函数返回一个包含列表中每个其他元素的列表,从第一个元素开始。
到目前为止,我已经不知道如何从这里做,因为我只是在学习如何for循环Python中是不同的:
def altElement(a):
b = []
for i in a:
b.append(a)
print b
我对如何在Java中执行此操作有一般的想法,但我正在学习Python并且不知道如何执行此操作。在第一个之后跳过其他所有元素
我需要实现一个函数,该函数返回一个包含列表中每个其他元素的列表,从第一个元素开始。
到目前为止,我已经不知道如何从这里做,因为我只是在学习如何for循环Python中是不同的:
def altElement(a):
b = []
for i in a:
b.append(a)
print b
def altElement(a):
return a[::2]
切片符号a[start_index:end_index:step]
return a[::2]
其中start_index
默认为0
,end_index
默认为len(a)
。
b = a[::2]
使用for循环像你这样,一个办法是这样的:
def altElement(a):
b = []
j = False
for i in a:
j = not j
if j:
b.append(i)
print b
Ĵ只是让0和1之间并切换到跟踪时,追加一个元素为b。
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]
]
或者,你可以这样做:
for i in range(0, len(a), 2):
#do something
扩展的片断记法是简洁得多,虽然。
这对我很有帮助,但它与扩展切片符号不同之处在于它为您提供了一个索引,您可以使用该索引进入原始数组,而不是获得“过滤”数组。所以他们确实有不同的用例。 – 2015-12-11 11:43:32
有更多的方法不止一个到皮肤猫。 - 西巴史密斯
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]
你为什么不干脆用一个布尔值的切换?此外,这是无法言喻的单一性。 – 2012-01-14 22:35:17
我以这种方式写作,以反映作者的尝试。是的,这不是很像蟒蛇。当然,我会愉快地编辑并使其成为一个布尔... – bchurchill 2012-01-14 22:36:37
考虑到你可以使用列表片 – jdi 2012-01-14 22:37:27