Konvertieren der "yield from" -Anweisung in Python 2.7-Code
Ich hatte einen Code unter Python 3.2 und wollte ihn unter Python 2.7 ausführen. Ich habe es konvertiert (habe den Code vonmissing_elements
Ich bin mir aber nicht sicher, ob dies der effizienteste Weg ist. Grundsätzlich passiert was, wenn es zwei gibtyield from
ruft wie unten in der oberen hälfte und in der unteren hälfte aufmissing_element
Funktion? Werden die Einträge aus den beiden Hälften (obere und untere) in einer Liste aneinander angehängt, so dass die übergeordnete Rekursion mit der Funktionyield from
rufen und beide Hälften zusammen benutzen?
def missing_elements(L, start, end): # Python 3.2
if end - start <= 1:
if L[end] - L[start] > 1:
yield from range(L[start] + 1, L[end])
return
index = start + (end - start) // 2
# is the lower half consecutive?
consecutive_low = L[index] == L[start] + (index - start)
if not consecutive_low:
yield from missing_elements(L, start, index)
# is the upper part consecutive?
consecutive_high = L[index] == L[end] - (end - index)
if not consecutive_high:
yield from missing_elements(L, index, end)
def main():
L = [10, 11, 13, 14, 15, 16, 17, 18, 20]
print(list(missing_elements(L, 0, len(L)-1)))
L = range(10, 21)
print(list(missing_elements(L, 0, len(L)-1)))
def missing_elements(L, start, end): # Python 2.7
return_list = []
if end - start <= 1:
if L[end] - L[start] > 1:
return range(L[start] + 1, L[end])
index = start + (end - start) // 2
# is the lower half consecutive?
consecutive_low = L[index] == L[start] + (index - start)
if not consecutive_low:
return_list.append(missing_elements(L, start, index))
# is the upper part consecutive?
consecutive_high = L[index] == L[end] - (end - index)
if not consecutive_high:
return_list.append(missing_elements(L, index, end))
return return_list