1

我有一个嵌套的元组列表,我需要将其分解为一个列表并删除每个列表的第一个序数。我似乎无法弄清楚如何做到这一点。

我有示例数据,例如:

[[('Item 1', <__main__.J object at 0x1018fc690>), ('Item 2', <__main__.J object at 0x1018fc6d0>)]]

我正试图将其减少到

[<__main__.J object at 0x1018fc690>, <__main__.J object at 0x1018fc6d0>]

有人可以指出我正确的方向。我试过 itertools 和 zip(*) 无济于事。

import itertools
import operator

class J(object):
    pass

w = J()
w.Type = 'Item 1'
w.Page = 35
w.Fragment = 'AA'

q = J()
q.Type = 'Item 2'
q.Page = 78
q.Fragment = 'BA'

z = [[('Item 1', w),('Item 2', q)]]
y = [b for b in z]
print y

result = ([ a for a,b in z ], [ b for a,b in z ])
print result
print zip(*z)
4

3 回答 3

7

这就是你要找的东西?

result = [c[1] for b in z for c in b]
print result
于 2013-11-01T05:17:21.450 回答
3

像这样的东西?

>>> lis = [[(1, 'a'), (2, 'b')]]

zip

>>> zip(*lis[0])[1]
('a', 'b')

列表理解:

>>> [y for _, y in lis[0]]
['a', 'b']
于 2013-11-01T05:16:18.400 回答
0

作为@Christian 的答案的替代方案(并且该答案没有任何问题),您也可以使用itertools扁平化列表来执行此操作:

result = [c[1] for c in itertools.chain.from_iterable(z)]

我会选择您认为更容易遵循的任何结构。两者都假设只有一层嵌套 - 可以使用递归处理程序来处理任意深度的嵌套。

于 2013-11-01T05:30:28.047 回答