将列表拆分为两个列表,分别对应于每隔一个元素

12 投票
3 回答
12091 浏览
提问于 2025-04-18 03:06

我知道有很多笨拙的方法可以做到这一点,但我想找一种简洁优雅的Python方式来完成以下任务。给定一个数字列表:

a = [0,1,2,3,4,5,6,7,8,9]

将这个列表分成两个列表,每个列表包含交替的元素:

b = [0,2,4,6,8]
c = [1,3,5,7,9]

3 个回答

1

试试这个:

a = [0,1,2,3,4,5,6,7,8,9]
>>> b=[i for x,i in enumerate(a) if x%2==1]
>>> c=[i for x,i in enumerate(a) if x%2==0]
>>> b
  [1, 3, 5, 7, 9]
>>> c
  [0, 2, 4, 6, 8]
5

你可以通过列表切片来实现这个功能:

b = a[::2]
c = a[1::2]

示例

>>> a = [0,1,2,3,4,5,6,7,8,9]

>>> b = a[::2]
>>> c = a[1::2]

>>> print b
[0,2,4,6,8]

>>> print c
[1,3,5,7,9]

这里的 [::] 语法是这样的: [开始:结束:步长]。如果你不指定开始和结束的参数,它会作用于整个列表。所以,上面的代码实际上是在做:

对于 b:从索引0开始,从 a 中每隔一个元素取一个
对于 c:从索引1开始,从 a 中每隔一个元素取一个

26

你想要的是:

b = a[::2]  # Start at first element, then every other.

还有:

c = a[1::2]  # Start at second element, then every other.

所以现在我们得到了我们想要的结果:

>>> print(b)
[0, 2, 4, 6, 8]
>>> print(c)
[1, 3, 5, 7, 9]

撰写回答