所以我想创建一个列表,它是一些现有列表的子列表。
例如,
L = [1, 2, 3, 4, 5, 6, 7],我想创建一个子列表li,使其li包含所有L位于奇数位置的元素。
L = [1, 2, 3, 4, 5, 6, 7]
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基于-,因此第一个元素在position 0,第二个元素在1etc):
0
1
1, 3, 5
因此结果(实际数字)将为:
2, 4, 6
将[1::2]在年底只是为了列表切片的符号。通常采用以下形式:
[1::2]
some_list[start:stop:step]
如果省略start,将使用默认值(0)。因此,将选择第一个元素(位于position 0,因为索引是0基于-的)。在这种情况下,将选择第二个元素。
start
因为省略了第二个元素,所以使用默认值(列表的末尾)。因此,列表是 从第二个元素到最后一个元素 进行迭代 的 。
我们还提供了第三个参数(step)2。这意味着将选择一个元素,将跳过下一个元素,依此类推…
step
2
因此,总结起来,在这种情况下[1::2]意味着:
step=2
step=1
编辑 :@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“for”循环中访问索引
for