列表推导式:将列表中每两个元素拼接在一起

16

我该如何将lst1转换为lst2,通过将元素1与元素2等依次连接起来?

lst1=[' ff 55 00 90 00 92 00 ad 00 c6 00 b7 00 8d 00 98 00 87 00 8a 00 98 00 8f 00 ca 01 78 03 54 05 bf']
lst2=[ff55, 0090, 0092, 00ad, 00c6, 00b7, 008d, 0098, 0087, 008a, 0098, 008f, 00ca, 0178, 0354,05bf]

我尝试了,但效果不如预期:

   for i in lst:
        lstNew = []
        tempList =  i.split()
        lenList = len(tempList)
        #print tempList
        index = 0
        while (index < lenList):
            print tempList[index] + tempList[index+1]
            index = index + 2
4个回答

29
这可以吗:
>>> lst = ['ff', '55', '00', '90', '00', '92', '00', 'ad', 
           '00', 'c6', '00', 'b7', '00', '8d', '00', '98', 
           '00', '87', '00', '8a', '00', '98', '00', '8f', 
           '00', 'ca', '01', '78', '03', '54', '05', 'bf']

>>> [ ''.join(x) for x in zip(lst[0::2], lst[1::2]) ]
    ['ff55', '0090', '0092', '00ad', '00c6', '00b7', '008d', 
     '0098', '0087', '008a', '0098', '008f', '00ca', '0178', 
     '0354', '05bf']
>>>

或者

>>> [ x+y for x,y in zip(lst[0::2], lst[1::2]) ]
['ff55', '0090', '0092', '00ad', '00c6', '00b7', 
 '008d', '0098', '0087', '008a', '0098', '008f', 
 '00ca', '0178', '0354', '05bf']  
>>>

2
如果你喜欢的话,也可以写成[a + b for a,b in zip(...)] :-) - mgilson
哟 :) 这看起来更整洁了。 - James Sapam
你忘记了 lst 的闭合] - Yep_It's_Me
这将创建“lst”的两个副本。 - James Mills

5
假设您有一个由空格分隔的2个字符组成的字符串,您可以执行以下操作:
>>> from funcy import ichunks
>>> s = "ff 55 00 90 00 92 00 ad 00 c6 00 b7 00 8d 00 98 00 87 00 8a 00 98 00 8f 00 ca 01 78 03 54 05 bf"
>>> ["".join(chunk) for chunk in ichunks(2, s.split())]
['ff55', '0090', '0092', '00ad', '00c6', '00b7', '008d', '0098', '0087', '008a', '0098', '008f', '00ca', '0178', '0354', '05bf']
>>>

这使用了我最喜欢的库funcy更新: 根据评论的建议,这里有一个稍微更好的版本:
>>> from funcy import ichunks
>>> s = "ff 55 00 90 00 92 00 ad 00 c6 00 b7 00 8d 00 98 00 87 00 8a 00 98 00 8f 00 ca 01 78 03 54 05 bf"
>>> [c[:2] + c[3:5] for c in ichunks(6, s)]
['ff55', '0090', '0092', '00ad', '00c6', '00b7', '008d', '0098', '0087', '008a', '0098', '008f', '00ca', '0178', '0354', '05bf']
>>>

map(''.join, ichunks(2, s.split())) - Suor
或者不分割 [c[1:3] + c[4:6] for c in ichunks(6, lst1)] - Suor
@ James Mills 如何在长列表中仅将 FF 和 55 连接在一起,形成 "FF55"。 - Poka

4

您需要正确定义列表。您的列表只有一个项目,是一个字符串。这是一个长度为2的字符串列表:(我认为这是您想要的)

lst1 = ['ff', '55', '00', '90', '00', '92', '00', 'ad', '00', 'c6', '00', 'b7', '00', '8d', '00', '98', '00', '87', '00', '8a', '00', '98', '00', '8f', '00', 'ca', '01', '78', '03', '54', '05', 'bf']

然后您可以这样做来创建lst2:
lst2 = []
for i in range(0, len(lst1), 2):
    lst2.append(lst1[i] + lst1[i+1)

这是在迭代lst1并将每2个元素放在一起,然后将其附加到lst2中。


3

给定您的列表格式为

lst1=[' ff 55 00 90 00 92 00 ad 00 c6 00 b7 00 8d 00 98 00 87 00 8a 00 98 00 8f 00 ca 01 78 03 54 05 bf']

让我们替换所有的空格并将其转换为字符串

list1=''.join([i.replace(" ","") for i in lst1])

现在,我们可以每隔4个字符进行增量操作,以获得结果。
list1= [list1[i:i+4]for i in range(0,len(list1),4)]
print list

#output=['ff55', '0090', '0092', '00ad', '00c6', '00b7', '008d', '0098', '0087', '008a', '0098', '008f', '00ca', '0178', '0354', '05bf']

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接