如何通过拉动另一个列表中的每个其他元素来创建子列表。
我有一个如下所示的列表:
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
如果您有任何改进建议,请告诉我。
答案 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]