ich habe zwei Listen, welche jeweils Integers in der Range von 1 bis max. 899 enthalten können.
Ich möchte die Werte aus beiden Listen, aufsteigend sortiert, mit der jeweiligen Quellenangabe ausgeben.
Ich habe mir nachstehende Lösung überlegt und würde gerne wissen, ob diese so brauchbar ist,
oder ein anderer Lösungsansatz hier vielleicht sinnvoller wäre. Vielen Dank.
Ich benutze Python 3.5.2 unter Windows Windows-7-6.1.7601-SP1.
Code: Alles auswählen
def remove_the_first_item(list):
try:
removed = list.pop(0)
except:
removed = 999 # end of list
return removed, list
def smallest_element(list1, list2):
a, list1 = remove_the_first_item(list1)
b, list2 = remove_the_first_item(list2)
while True:
if a < b:
yield '{} aus Liste 1'.format(a)
a, list1 = remove_the_first_item(list1)
else:
if a == 999 and b == 999: break # Ende
yield '{} aus Liste 2'.format(b)
b, list2 = remove_the_first_item(list2)
def smallest_element_wrapper(values_from_smallest_element):
for value in values_from_smallest_element:
yield value
# Nach der Verarbeitung müssen beide Listen im Original erhalten bleiben.
# Die Listen sind hier bewusst vorsortiert.
x = [10,20,40,70,84,85,91,95,120]
y = [15,20,39,72,83,90]
wrap = smallest_element_wrapper(smallest_element(x[:],y[:]))
for c, i in enumerate(wrap, start=1):
print('{0:2.0f}. {1}'.format(c,i))
# ******************************************************************************
# Ausgabe:
# 1. 10 aus Liste 1
# 2. 15 aus Liste 2
# 3. 20 aus Liste 2
# 4. 20 aus Liste 1
# 5. 39 aus Liste 2
# 6. 40 aus Liste 1
# 7. 70 aus Liste 1
# 8. 72 aus Liste 2
# 9. 83 aus Liste 2
# 10. 84 aus Liste 1
# 11. 85 aus Liste 1
# 12. 90 aus Liste 2
# 13. 91 aus Liste 1
# 14. 95 aus Liste 1
# 15. 120 aus Liste 1