Ich bin sehr neu in der Informatik - das ist mein erstes Programm. Ich schrieb ein Python-Programm, das Daten in zwei Spalten von einem Excel-Blatt "Labels": "Werte" und konfiguriert sie in Listen von Etiketten, deren jeweilige Werte Summe 30. Jedes Etikett ist einzigartig und nur einmal vorkommt, aber die verschiedenen Etiketten können habe den gleichen Wert.Wie bearbeite ich diesen Algorithmus, so dass er Kombinationen ohne Ersetzung oder Wiederverwendung eines Elements erstellt?
Als ich jedoch das Programm zum ersten Mal anwendete, betrug die Laufzeit fast 30 Minuten, da der Algorithmus jede mögliche Kombination von Labels erstellte. Offensichtlich 50 Etiketten mit Werten weniger als 10 gegeben, das ist eine Menge möglicher Kombinationen.
Ich wollte etwas Hilfe meinen aktuellen Algorithmus zu bearbeiten, so dass es einzigartige Gruppen erstellt. Sobald ein Label verwendet wird, möchte ich nicht, dass es in einer anderen Gruppe angezeigt wird.
Derzeit sieht mein Code wie folgt aus:
def combinator(X): #this function pulls two lists together to create a dictionary
from xlrd import open_workbook
wb = open_workbook(X)
L = []
P = []
for s in wb.sheets():
for col in range(s.ncols):
for row in range(s.nrows):
if row !=0:
l = s.cell(row,0).value
L.append(l)
p = s.cell(row,1).value
P.append(p)
Lots = L[0:(len(L)/2)]
Pallets = P[0:(len(L)/2)]
D = dict(zip(Lots,Pallets))
return D
def grouper(D, N):#this finds combinations of 30 and puts them in groups
from itertools import combinations
groups_of_thirty = []
for l in range(0, len(D)):
for y in combinations(D.items(), l):
keys = []
sum = 0
for key, value in y:
keys.append(key)
sum += value
if sum == N:
groups_of_thirty.append(keys)
flattened = [v for flat in groups_of_thirty for v in flat]
K = D.keys()
s = set(K)
remainder = list(s - set(flattened))
list(groups_of_thirty)
return groups_of_thirty, \
remainder
def transposer(G):#this exports the final list into each cell and writes the spreadsheet as a csv to a different directory.
import os
os.chdir(Q)
import csv
with open(O, "wb") as f:
writer = csv.writer(f)
str(writer.writerows(G))
return
transposer(grouper(combinator(I),N))
schätzen würde jede Hilfe bei diesem - Logik oder Pseudo-Code bevorzugt, aber einige Hinweise mit ungewöhnlichen Syntax wäre hilfreich, da ich ein Neuling bin.
Vielen Dank!
Edit: Hier ist ein Screenshot von Beispieldaten in einem Excel-Blatt.
Screenshot of Excel sheet with Input and Desired Output
Bitte lassen Sie mich wissen, ob es hilfreich wäre, Screenshots meiner Eingabe, Stromausgang und die gewünschte Ausgabe zu sehen. Ich habe noch nicht das Privileg, Bilder in Post einzubetten, also habe ich es weggelassen, weil ich dachte, dass es ein Streit sein könnte. – BMENRohan
Sie können Pandas in Python für die Datenverarbeitung verwenden, es würde Ihre Codezeile reduzieren und gibt mehr Leistung – SarathSprakash
@SarathSprakash Könnten Sie etwas mehr erklären? Ich weiß, dass Pandas ein Python-Modul ist, aber ich bin völlig unbekannt damit. – BMENRohan