簡體   English   中英

Python:轉換元組列表的列表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM