簡體   English   中英

在Python中垂直合並列表列表的兩列

[英]Vertically merge two columns of a list of lists in Python

輸入如下所示(my_list)。 這實際上是十六進制數字的列表。 每對元素 0-1、2-3、4-5 形成 16 位有符號整數,因此我需要合並每一對元素。

my_list  = [['61', '00', '7B', '01', 'F2', '1F'],
       ['9A', 'FE', '8C', '02', '01', '22'],
       ['F4', 'FD', '60', '04', '35', '24']]

我想得到的輸出是

aX =  ['6100', '9AFE', 'F4FD']
aY =  ['7B01', '8C02', '6004']
aZ =  ['F21F', '0122', '3524']

現在我正在按照以下方式進行操作。 它有效,但問題是隨着 my_list 行長度的增加,我必須不斷添加更多代碼行。 有沒有更好的辦法?

aX = [ x[0] + x[1]   for x in  my_list ]
aY = [ x[2] + x[3]   for x in  my_list ]
aZ = [ x[4] + x[5]   for x in  my_list ]

感謝您的投入!

您可以組合mapzip如下所示:

>>> list(zip(*map(lambda x: [''.join(x[i:i+2]) for i in range(0, len(x), 2)], my_list)))
[('6100', '9AFE', 'F4FD'), ('7B01', '8C02', '6004'), ('F21F', '0122', '3524')]

或作為嵌套列表:

>>> list(map(list, zip(*map(lambda x: [''.join(x[i:i+2]) for i in range(0, len(x), 2)], my_list))))
[['6100', '9AFE', 'F4FD'], ['7B01', '8C02', '6004'], ['F21F', '0122', '3524']]

您可以使用帶有str.join的列表推導來連接每兩個項目,並使用zip進行轉置:

aX, aY, aZ = map(list, zip(*([''.join(l[i:i+2]) for i in range(0, len(l), 2)]
                             for l in my_list)))

輸出:

aX
# ['6100', '9AFE', 'F4FD']

aY
# ['7B01', '8C02', '6004']

aZ
# ['F21F', '0122', '3524'])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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