在奇数位置提取列表元素

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在奇数位置提取列表元素相关的知识,希望对你有一定的参考价值。

所以我想创建一个列表,它是一些现有列表的子列表。

例如,

L = [1, 2, 3, 4, 5, 6, 7],我想创建一个子列表li,使得li包含奇数位置的L中的所有元素。

虽然我可以做到

L = [1, 2, 3, 4, 5, 6, 7]
li = []
count = 0
for i in L:
    if count % 2 == 1:
        li.append(i)
    count += 1

但我想知道是否有其他方法可以有效地以较少的步骤进行相同的操作。

答案

是的你可以:

l = L[1::2]

这就是全部。结果将包含放置在以下位置的元素(基于0,因此第一个元素位于0位置,第二个位于1等):

1, 3, 5

所以结果(实际数字)将是:

2, 4, 6

说明

最后的[1::2]只是列表切片的符号。通常它是以下形式:

some_list[start:stop:step]

如果我们省略start,将使用默认值(0)。因此,将选择第一个元素(位于0位置,因为索引是基于0的)。在这种情况下,将选择第二个元素。

因为省略了第二个元素,所以使用了默认值(列表的末尾)。所以列表正在从第二个元素迭代到结尾。

我们还提供了第三个参数(step),它是2。这意味着将选择一个元素,将跳过下一个元素,依此类推......

所以,总而言之,在这种情况下,[1::2]意味着:

  1. 取第二个元素(顺便说一下,如果你从索引中判断,它是一个奇数元素),
  2. 跳过一个元素(因为我们有step=2,所以我们跳过一个,与默认的step=1相反),
  3. 采取下一个元素,
  4. 重复步骤2.-3。直到列表结束,

编辑:@PreetKukreti给出了关于Python列表切片符号的另一个解释的链接。见这里:Explain Python's slice notation

额外 - 用enumerate()替换计数器

在您的代码中,您明确地创建并增加计数器。在Python中,这不是必需的,因为您可以使用enumerate()枚举一些迭代:

for count, i in enumerate(L):
    if count % 2 == 1:
        l.append(i)

以上与您使用的代码完全相同:

count = 0
for i in L:
    if count % 2 == 1:
        l.append(i)
    count += 1

更多关于在Python中用计数器模拟for循环:Accessing the index in Python 'for' loops

另一答案

对于奇数位置,您可能需要:

>>>> list_ = list(range(10))
>>>> print list_[1::2]
[1, 3, 5, 7, 9]
>>>>
另一答案

我喜欢List comprehensions,因为他们的Math(Set)语法。那怎么样:

L = [1, 2, 3, 4, 5, 6, 7]
odd_numbers = [y for x,y in enumerate(L) if x%2 != 0]
even_numbers = [y for x,y in enumerate(L) if x%2 == 0]

基本上,如果您枚举列表,您将获得索引x和值y。我在这里做的是将值y放入输出列表(偶数或奇数)并使用索引x来确定该点是否为奇数(x%2 != 0)。

以上是关于在奇数位置提取列表元素的主要内容,如果未能解决你的问题,请参考以下文章

python怎么获取list的某个元素的位置

使用模式匹配交换列表中的元素对

13 个非常有用的 Python 代码片段

python把列表前几个元素提取到新列表

python中numpy.ndarray怎么删除指定下标的元素

为啥我的 Python 代码为列表中的所有元素提取相同的数据?