Ich habe eine koordinierte Speicherliste in Python A[row,col,value]
zum Speichern von Nicht-Nullen-Werte.Erste Elemente in der inneren Liste effizient wie möglich
Wie kann ich die Liste aller Zeilenindizes bekommen? Ich habe erwartet, dass A[0:][0]
funktioniert als print A[0:]
druckt die ganze Liste, aber print A[0:][0]
nur Drucke A[0]
.
Der Grund I stellen, ist für eine effiziente Berechnung der Anzahl von Nicht-Null-Werte in jeder Reihe d.h über range(0,n)
Iterieren wobei n die Gesamtzahl der Zeilen ist. Dies sollte viel billiger sein als meine aktuelle Art von for i in range(0,n): for j in A: ...
.
Etwas wie:
c = []
# for the total number of rows
for i in range(0,n):
# get number of rows with only one entry in coordinate storage list
if A[0:][0].count(i) == 1: c.append(i)
return c
Over:
c = []
# for the total number of rows
for i in range(0,n):
# get the index and initialize the count to 0
c.append([i,0])
# for every entry in coordinate storage list
for j in A:
# if row index (A[:][0]) is equal to current row i, increment count
if j[0] == i:
c[i][1]+=1
return c
EDIT:
Mit Junuxx Antwort, this question und this post ich mit den folgenden kam (zur Rückführung der Zahl von Singleton - Reihen), die für viel schneller ist meine aktuelle Problemgröße von A
als mein ursprünglicher Versuch. Es wächst jedoch immer noch mit der Anzahl der Zeilen und Spalten. Ich frage mich, ob es möglich ist, nicht über A
zu iterieren, sondern nur bis n
?
# get total list of row indexes from coordinate storage list
row_indexes = [i[0] for i in A]
# create dictionary {index:count}
c = Counter(row_indexes)
# return only value where count == 1
return [c[0] for c in c.items() if c[1] == 1]
@larsman: Ich gehe davon aus A eine Liste von Tripel ist. – Junuxx
Ja, du hast es verstanden. –
Können Sie ein einfaches, ineffizientes Arbeitsbeispiel für das schreiben, was Sie zu tun versuchen? Ich finde den Wortlaut der Frage wirklich verwirrend, und keiner Ihrer Beispielcodeblöcke scheint dasselbe zu tun ..? – dbr