2017-08-22 3 views
0

Hier ist mein Code, der die Anzahl der eindeutigen Nummern zählt und sucht nach Zahlen, die 5 mal in Liste A wiederholen, dann alle, die 2 mal in Liste A als wiederholen Nun, und druckt die Ergebnisse aller Übereinstimmungen von Liste A mit dem entsprechenden Wert aus Liste B. Auch Liste A und B haben immer die gleiche Größe.Python 3.6 - Trennen der Spalten in mehreren Listen in neue Listen

a = (['12','12','12','12','12','23','24','24','31','31']) 
b = (['1','2','2','2','2','2','5','5','5','5']) 

from collections import Counter 
counts = Counter(a) 

c = [] 

for ai , bi in zip(a,b): 
    if counts[ai] == 5: 
     c.append([ai,bi]) 
    elif counts[ai] == 1: 
     c.append([ai,bi]) 
    else: 
     None 

print(c) 
#[['12', '1'], ['12', '2'], ['12', '2'], ['12', '2'], ['12', '2'], ['23', '2']] 

Gibt es eine schnelle Art und Weise, so dass mein Code, um die mehrere Ausgabelisten in eine Liste formatieren können, die wie folgt aussieht:

#[('12', '12', '12', '12', '12', '23'), ('1', '2', '2', '2', '2', '2')] 

so dass jede Spalte in jeder Liste kann seine eigene Liste haben.

Vielen Dank!

+0

'12' Wert erscheint 4 mal nicht 5 – RomanPerekhrest

+0

@RomanPerekhrest Dank für die Suche nach den Tippfehler! –

+0

Was wäre, wenn "a" "[" 12 "," 24 "," 31 "," 12 "," 12 "," 23 "," 24 "," 12 "," 31 "," 12] "wäre? Was sollte das Ergebnis sein? – RomanPerekhrest

Antwort

2

Was das Thema:

import itertools 

c = [['12', '1'], ['12', '2'], ['12', '2'], ['12', '2'], ['12', '2'], ['23', '2']] 

merged = list(itertools.chain(*c)) 
# merged = ['12', '1', '12', '2', '12', '2', '12', '2', '12', '2', '23', '2'] 

split = [tuple(merged[::2]), tuple(merged[1::2])] 
# split = [('12', '12', '12', '12', '12', '23'), ('1', '2', '2', '2', '2', '2')] 
1

aus dem Code fort

c = [['12', '1'], ['12', '2'], ['12', '2'], ['12', '2'], ['12', '2'], ['23', '2']] 

cols = [] #initialize list of columns 
for i in range(2): 
    tup = tuple([item[i] for item in c]) #create tuple from loop of column 
    cols.append(tup) 
print(cols) # [('12', '12', '12', '12', '12', '23'), ('1', '2', '2', '2', '2', '2')] 
1

Sie könnten eine Liste Verständnis verwenden

>>> x = [['12', '1'], ['12', '2'], ['12', '2'], ['12', '2'], ['12', '2'], ['23', '2']] 
>>> [tuple(v[0] for v in x), tuple(v[1] for v in x)] 
[('12', '12', '12', '12', '12', '23'), ('1', '2', '2', '2', '2', '2')] 

Es wahrscheinlich effizienter sein würde Ihre Daten zu speichern im ursprünglich gewünschten Format. Tupel sind unveränderlich, so dass es einfacher wäre, Listen zu verwenden und an sie anzuhängen. Etwas wie:

columns = [] 
values = [] 

for ai , bi in zip(a,b): 
    if counts[ai] == 5: 
     columns.append(ai) 
     values.append(bi) 
    elif counts[ai] == 1: 
     columns.append(ai) 
     values.append(bi) 

print([columns, values]) 

# prints this 
[['12', '12', '12', '12', '12', '23'], ['1', '2', '2', '2', '2', '2']]