将列表拆分为两个列表,分别对应每个其他元素。

12

我知道有很多笨重的方法可以做到这一点,但我正在寻找一种更加优雅的Pythonic方式来完成以下任务。给定一个数字列表:

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

将此列表拆分成两个列表,对应于每个其他元素:

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

24

你想要:

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]

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]
[::]语法如下:[start:end:step]。如果您不为起始和结束指定任何参数,则它将与整个列表一起使用。因此,上面的代码正在执行以下操作:
对于b:从索引0开始,在a中每隔一个元素取一个
对于c:从索引1开始,在a中每隔一个元素取一个

1

Try This :

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]

你不是按照索引分割,而是按照列表元素进行分割。只需尝试分割[1,13,75,23,11,17]... - user1220978
好的,现在没问题。不过我会交换x和i,这样更直观! - user1220978

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接