[英]Python: transform a list of lists of tuples
假设我有如下数据结构:
[[ tuple11,
tuple12,
... ],
[ tuple21,
tuple22,
... ],
...]
也就是说,外部列表可以包含任意数量的元素,每个元素(列表)可以包含任意数量的元素(元组)。 我怎样才能将其转换为:
[[ tuple11,
tuple21,
... ],
[ tuple12,
tuple22,
... ],
... ]
我有以下解决方案在外部列表中的两个元素工作,但我无法弄清楚如何概括它:
map(lambda x, y: [x, y], *the_list)
添加:
只是为了增加一些细节,上面的每个元组实际上都是两个np.array
的元组。
如果我开始使用以下数据结构:
[[(array([111, 111]), array([121, 121])),
(array([112, 112]), array([122, 122])),
(array([131, 131]), array([141, 141])),
(array([132, 132]), array([142, 142]))],
[(array([211, 211]), array([221, 221])),
(array([212, 212]), array([222, 222])),
(array([231, 231]), array([241, 241])),
(array([232, 232]), array([242, 242]))]]
我需要把它变成:
[[(array([111, 111]), array([121, 121])),
(array([211, 211]), array([221, 221]))],
[(array([112, 112]), array([122, 122])),
(array([212, 212]), array([222, 222]))],
[(array([131, 131]), array([141, 141])),
(array([231, 231]), array([241, 241]))],
[(array([132, 132]), array([142, 142])),
(array([232, 232]), array([242, 242]))]]
注意,对于任何正N,数组通常不总是1✕2但是1✕N。每个元组中总是有两个数组,但每个内部列表中有任意数量的元组,外部列表中有任意数量的这些内部列表。
我习惯于玩弄NumPy数组,但我对本机列表,元组等的经验很少。
你想要列,所以你可以使用zip
功能:
zip(*main_list)
但是,如果你只想要列表,它会以元组格式返回列,你可以使用map
将它们转换为列表:
map(list,zip(*main_list))
演示:
>>> main_list=[[(1,2),(3,4)],[(5,6),(7,8)]]
>>> zip(*main_list)
[((1, 2), (5, 6)), ((3, 4), (7, 8))]
用你的例子:
>>> main_list=[[(np.array([111, 111]), np.array([121, 121])),
... (np.array([112, 112]), np.array([122, 122])),
... (np.array([131, 131]), np.array([141, 141])),
... (np.array([132, 132]), np.array([142, 142]))],
... [(np.array([211, 211]), np.array([221, 221])),
... (np.array([212, 212]), np.array([222, 222])),
... (np.array([231, 231]), np.array([241, 241])),
... (np.array([232, 232]), np.array([242, 242]))]]
>>>
>>> zip(*main_list)
[((array([111, 111]), array([121, 121])), (array([211, 211]), array([221, 221]))),
((array([112, 112]), array([122, 122])), (array([212, 212]), array([222, 222]))),
((array([131, 131]), array([141, 141])), (array([231, 231]), array([241, 241]))),
((array([132, 132]), array([142, 142])), (array([232, 232]), array([242, 242])))]
我似乎找到了解决方案。 我不认为它优雅,但至少它似乎工作。 让我们把元组的列表的原始列表main_list
和元组的列表的转换列表new_list
:
def transform_coeff_struct(main_list):
new_list = []
for ii, inner_list in enumerate(main_list):
for jj, some_tuple in enumerate(inner_list):
if ii==0:
new_list.append([some_tuple,])
else:
new_list[jj].append(some_tuple)
return new_list
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.