0

我需要写一个表达式,我完全被卡住了。我有部分代码我认为我写得正确,但我坚持其余部分。我需要代码返回一个包含列表中每个第 3 个元素的新列表,从索引 0 开始。

例如:如果我有[0, 1, 2, 3, 4, 5]我需要返回的列表[0, 3]

我到目前为止的代码是:

result = []
i = 0
while i < len(L):
    result.append(L[i])
    i = 
return result

有人可以帮我弄清楚我需要什么i =表达式才能使这段代码正常工作。

4

5 回答 5

9

首先,您可以使用扩展切片表示法使事情变得更容易:

In [1]: l = [0, 1, 2, 3, 4, 5]

In [2]: l[::3]
Out[2]: [0, 3]

文档

一些序列还支持带有第三个“step”参数的“扩展切片”:a[i:j:k] 选择 a 中索引为 x 的所有项目,其中 x = i + n*k,n >= 0 和 i <= x <j。

至于您的代码示例,您可能需要i = i + 3i += 3那里。

于 2012-11-18T11:00:36.290 回答
1

也许试试这个:

result = []
for i in range(0, len(L), 3):
    result.append(L[i])
return result
于 2012-11-18T11:02:36.037 回答
1

另一种选择是使用enumerate.

[j for i, j in enumerate([0, 1, 2, 3, 4, 5]) if i % 3 == 0]
于 2012-11-18T11:05:23.190 回答
1

这会给你一个可迭代的序列:

import itertools

l = [0, 1, 2, 3, 4, 5]
itertools.islice(l, 0, None, 3)

要将其转换为列表,请使用 list() 函数。

impiort itertools

def get_sublist(l):
    return list(itertools.islice(l, 0, None, 3))
于 2012-11-18T11:06:55.357 回答
0
    python 3.2
    one way:
    >>> [i for i in range(0,len(L),3)]
    [0,3]


    your method:
    result = []
    i = 0
    while i <= len(L):
       result.append(L[i])
       i+=3
    return result
于 2012-11-18T14:58:16.377 回答