如何在列表中拉出其他所有值?

时间:2014-11-17 03:48:45

标签: python list

如何通过拉动另一个列表中的每个其他元素来创建子列表。

我有一个如下所示的列表:

a = ['12','23','34']

然后我使用枚举函数为列表中的每个元素赋值。

b = list(enumerate(a, start=1))

所以b(键,值)的结果:

>>> b
>>> [(1,'12'),(2,'23'),(3, '34')]

现在,我一直在寻找互联网(主要使用谷歌)并且我一直在阅读文档,但我无法找到直接答案。如何将每个奇数键拉入另一个列表?

我想要的结果:

 [(1,'12'),(3,'34')]

以下是我一直在尝试的事情:

1。)

for i in b:
    c = b[i%2 == 1]

2。)

for i in b:
    if (i%2):
        c = i

如果您有任何改进建议,请告诉我。

5 个答案:

答案 0 :(得分:6)

您只需使用Python's slice notation获取所有其他元素:

>>> b = [(1, '12'), (2, '23'), (3, '34')]
>>> b[::2]
[(1, '12'), (3, '34')]
>>>

答案 1 :(得分:1)

如果您希望使用列表以外的可迭代项执行此操作,则可以使用islice进行过滤

>>> a = ['12', '23', '34']
>>> from itertools import islice
>>> b = islice(enumerate(a, 1), None, None, 2)
>>> for c in b:
...     print c
... 
(1, '12')
(3, '34')

答案 2 :(得分:1)

另一种方法列表理解:

>>> my_list = ['12', '23', '34']
>>> [(i+1, my_list[i]) for i in range(0, len(my_list), 2)]
[(1, '12'), (3, '34')]

答案 3 :(得分:0)

已经有一些好的答案了,但一般来说你可能想避免枚举你不需要的值(这可以避免将它们放入元组中以后再丢弃它们):

>>> a = ['12', '23', '34']
>>> import itertools
>>> zip(itertools.count(1, 2), a[::2])  # Only odd values are fetched and enumerated
[(1, '12'), (3, '34')]

count()返回此处1,3,5等。这会直接使用原始列表a,并避免使用元组b的中间列表。

如果内存是个问题,可以通过将a[::2]替换为itertools.islice(a, None, None, 2)(类似于基于gnibbler的基于b的答案)来绕过中间列表构造{{1}},仅使用固定的和少量的记忆。

答案 4 :(得分:-1)

试试这个:

[(n, e) for n, e in enumerate(a, start=1) if n % 2 !=0]