2016-08-02 3 views
0

"" "Ein besserer Python-Code zum Finden der Summe der gemeinsamen Elemente in zwei Sequenzen #von ganzen Zahlen in einem Bereich?" "Python-Code, um die Summe der gemeinsamen Elemente in zwei Sequenzen von Ganzzahlen in einem Bereich zu finden

#F() constructs a sequence: 

def F(): 
    bot=int(input("Enter start value:")) 
#start value 
    top = int(input("Enter stop value:")) 
#stop value 
    L=range(bot,top+1) 
    return(L) 
# Let L1 and L2 two sequences 
L1=F() 
L2=F() 
print(L1, L2) 


#G()returns the sum of the common elements in L1 and L2: 

def G(L1, L2): 
    res = [] 
    for x in L1: 
     if x in L2: 
      res.append(x) 
    return sum(res) 
print(G(L1, L2)) 


# Example: L1=range(1,11), L2=range(5,21): 45(=5+6+7+8+9+10) 
+2

'Summe (Satz (L1) & Satz (L2))' vorausgesetzt, keine Duplikate. Wenn es sich immer um kontinuierliche Bereiche handelt, wie in Ihrem Beispielcode, können Sie noch besser vorgehen - identifizieren Sie einfach die Überlappungspunkte und berechnen Sie dann die arithmetische Reihe in geschlossener Form. – wim

+0

Was? Ich bin mir nicht sicher, was du fragst. –

Antwort

1

Wenn Ihre Lösung funktioniert, warum suchen Sie nach einem "besseren Python-Code"? Dein Code ist gut genug. Die einzige Änderung, die ich machen würde, ist die Liste res. Sie brauchen es nicht wirklich:

def G(L1, L2): 
    total = 0 
    for x in L1: 
     if x in L2: 
      total += x 
    return total 

Die Lösung mit set gut ist, wenn Sie sicher sind, dass alle Elemente in L1 und L2 einzigartig sind. In diesem Fall, weil man sie mit einem range erzeugt, sie sind einzigartig, und man konnte verwenden:

sum(set(L1).intersection(set(L2)) 

Wenn Duplikate sind, können Sie die Elemente auswählen können:

sum(filter(lambda x: x in L2, L1)) 

Oder Sie könnten auch verwenden Liste Verständnis:

sum([x for x in L1 if x in L2]) 

Aber ich wiederhole: ich denke, Ihre Lösung gut Python-Code ist.

Verwandte Themen