2014-06-27 12 views
5

Wie würde ich lst1 in lst2 umwandeln, indem ich Element 1 mit Element 2 verbinde und so weiter.Listenverständnis, das alle zwei Elemente zusammen in einer Liste verbindet

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

zu

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

versucht, wurde aber als nicht gesühnt

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 

Antwort

0

Sie benötigen eine Liste richtig zu definieren. Ihre Liste hat ein einzelnes Element, eine Zeichenfolge. Dies ist eine Liste von Strings der Länge 2: (was ich denke, ist, was Sie wollen)

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

Dann können Sie dies tun lst2 zu erstellen:

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

Dies wird iterieren lst1 und setzen jeden 2 Elemente zusammen, dann anhängen es lst2.

11

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

Oder

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

oder '[a + b für a, b in zip (...)]' wenn dir das besser gefällt :-) – mgilson

+0

ya :) das sieht besser aus –

+0

Du verpasst das schließende ']' für 'lst' –

5

Angenommen, Sie durch Leerzeichen Sie tun getrennt eine Reihe von 2-Buchstaben-Zeichen hatten, konnten:

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

Dies macht meiner Lieblingsbibliothek funcy

Aktualisierung:

Wie in den Kommentaren vorgeschlagen; hier ist eine etwas bessere Version:

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

Oder ohne zu teilen '[c [1: 3] + c [4: 6] für c in ichunks (6, lst1)] – Suor

0

Ihre Liste im Format

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

lassen Sie uns die Räume alle Gegeben ersetzen und in String konvertieren

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

jetzt können wir jede erhöhen 4 Zeichen, um das Ergebnis zu erhalten

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