拼接列表中的列表

时间:2014-05-29 23:41:26

标签: python list splice

在子列表中返回每四个数字最简洁的方法是什么,将所有数字列表视为一个列表?

A = [ ['a',[1,2,3]], ['b',[4,5]], ['c',[6,7,8,9,10]] ]

打印清单A:

时,我希望结果如下所示
[ ['a',[1]], ['b',[5]], ['c',[9]] ]

我可以看到这与拼接单个列表的方式类似,我会使用[:: 4]之类的东西。我猜我必须在这里使用其他东西,将数字列表视为一个列表。

2 个答案:

答案 0 :(得分:3)

我使用itertools.count(),这是一个方便的生成器,它返回越来越多的数字。使用它,它几乎与您最初提出的问题相同,仍然使用嵌套列表理解:

>>> from itertools import count
>>> c = count()
>>> B = [[let, [n for n in nums if next(c) % 4 == 0]] for let, nums in A]
>>> B
[['a', [1]], ['b', [5]], ['c', [9]]]

这是有效的,因为第一次调用next(c),它给出0,0%4 == 0所以我们保持n,下次我们得到1所以我们不保留它,等


[回答关于删除偶数元素的原始问题:]

您可以嵌套列表推导:

>>> A = [['a',[1,2,3]], ['b',[4,5]], ['c',[6,7,8,9,10]]]
>>> B = [[letter, [n for n in nums if n % 2 != 0]] for letter, nums in A]
>>> B
[['a', [1, 3]], ['b', [5]], ['c', [7, 9]]]

答案 1 :(得分:-1)

你可以做一个列表理解! list = [x [:: 2] for x in A]

与你所写的内容更接近的是:

list =[[x[0], x[1][::2]] for x in a]