ich ähnliche Elemente aus einer Liste zu entfernen, ich versuche, die eine SUB_LIST mit den Elementen Namen, das Datum enthält, und weitere Daten:ältere Elemente aus einer Liste entfernen
basket = [['cheese', '2015/04/16', 'junk'],['apple', '2015/04/15', 'other junk'],['apple', '2015/03/15', 'dessert'],['cheese', '2017/04/16', 'pie'],['banana', '2015/04/16', ''],['cheese', '2017/04/10', '']]
Wenn ein Element Namen (Frucht) erscheint zweimal in der Liste, das Programm sollte das Datum vergleichen und das ältere Element entfernen. Ich verwende datetime, um das zweite Element zu vergleichen und dieser Teil funktioniert. Aber wenn ich durch die Liste iteriere, überspringt es 'banana'
. Und das sollte der letzte hinzuzufügende Artikel sein.
ich diese Methode versucht haben:
def date_convert(date):
"""Takes a date string in the form YYYY/MM/DD and converts it to a
date object for comparisons."""
# Split date string by ".", " ", "/", or "-" to handle a wider range
# of possible inputs.
date = re.split('[. /\-]', date)
# Strip month of "0" because datetime does not accept that as valid
# input.
if(date[1][0] == '0'):
date[1] = date[1].strip('0')
return datetime.date(int(date[0]), int(date[1]), int(date[2]))
basket = [['cheese', '2015/04/16'],['apple', '2015/04/15'],['apple', '2015/03/15'],['cheese', '2017/04/16'],['banana', '2015/04/16'],['cheese', '2017/04/10']]
new_basket = []
for food in basket:
basket.remove(food)
for food2 in basket:
if food[0].upper() == food2[0].upper():
basket.remove(food2)
if date_convert(food[1]) > date_convert(food2[1]):
pass
else:
food = food2
else: new_basket.append(food)
print str(new_basket)
und erhalten diesen Ausdruck: [['cheese', '2017/04/16', 'pie'], ['apple', '2015/04/15', 'other junk']]
Nach dem Debugger erreicht er nie Banane in der for-Schleife.
Ist die Reihenfolge in der Ausgabeliste wichtig? Vielen Dank. – alecxe
Für die Methode? Möglicherweise. Aber überhaupt nicht für die gewünschte Ausgabe. –