在提取奇数位置列表的元素(Extract elements of list at odd posit

2019-06-18 04:05发布

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

例如,

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

但我想知道是否有另一种方式来有效和更少数量的步骤做。

Answer 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的名单切片符号另一种解释。 在这里看到: 解释一下Python的切片符号

附加功能-更换与柜台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

更多关于模拟for在Python与反循环: 访问在Python指数“为”循环



Answer 2:

对于奇数位置,你可能想:

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


Answer 3:

我很喜欢,因为他们的数学(集)语法的列表理解。 那么这个怎么样:

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 )。



文章来源: Extract elements of list at odd positions