2014-06-27 18 views
5

Jak przekonwertować lst1 do lst2 przez dołączenie elementu 1 do elementu 2 i tak dalej.Zrozumienie listy łączące co dwa elementy razem na liście

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'] 

do

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

próbował, ale nie było tak expiated

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 

Odpowiedz

0

Trzeba zdefiniować listę prawidłowo. Twoja lista zawiera pojedynczy element, ciąg znaków. Jest to lista ciągów o długości 2: (co moim zdaniem jest to, co chcesz)

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'] 

Następnie można zrobić, aby stworzyć lst2:

lst2 = [] 
for i in range(0, len(lst1), 2): 
    lst2.append(lst1[i] + lst1[i+1) 

to iteracji nad lst1 i oddanie każdego 2 elementy razem, a następnie dołączenie go to lst2.

11

Jest to ok:

>>> 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'] 
>>> 

Albo

>>> [ 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

lub '[a + b dla a, b w zip (...)]' jeśli podoba ci się to lepiej :-) – mgilson

+0

ya :) to wygląda bardziej schludnie –

+0

Brakuje zamknięcia ']' dla 'lst' –

5

Zakładając, że masz ciąg znaków 2-literowych oddzielonych spacjami mógłby zrobić:

>>> 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'] 
>>> 

To sprawia, że ​​korzystanie z mojej ulubionej biblioteki funcy

Aktualizacja:

Jak zasugerowano w komentarzach; tutaj jest nieznacznie lepsza wersja:

>>> 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'] 
>>> 
+0

'map (''. Join, ichunks (2, s.split()))' – Suor

+0

Lub bez podziału '[c [1: 3] + c [4: 6] dla c w ichunks (6, lst1)] ' – Suor

0

Biorąc swoją listę w formacie

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'] 

niech nam zamienić wszystkie spacje i przekształcić go w ciąg

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

teraz możemy zwiększyć każdy 4 znak, aby uzyskać wynik:

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']