Können Sie erstellen eine benutzerdefinierte generator-Funktion, die auf jedem durchsuchbar, nicht nur Listen - obwohl für Ihre Beispiel list.index, exception handling und Hack-Ordnung ist...
def takewhile_including(iterable, value):for it in iterable:yield it
if it == value:return
l1 =['apple','pear','grapes','banana']print('Until pear', list(takewhile_including(l1,'pear')))# Until pear ['apple', 'pear']print('Until blah', list(takewhile_including(l1,'blah')))# Until blah ['apple', 'pear', 'grapes', 'banana']
Richtig testen dropwhile_jon - Sie müssen erst in eine Liste, damit Sie vergleichen äpfel mit äpfel - sonst ist der test nur die Initialisierung der generator-Funktion
Auch Sie haben die "Früchte" dort, wo es sein sollte "iterierbar", denke ich.
Andere als die, sollten Sie testen, mit dem gleichen sentinel für alle Methoden, nicht mit zufälligen.
Es ist ein dropwhile im itertools dass Sie können verwenden Sie zum filtern der Elemente nach Ihrer Wahl und dann kann man sich mit minus beide, Sie bekommen, was Sie wollen :
l1 =['apple','pear','grapes','banana']
l1 =[x for x in l1[0:l1.index(<target>)+1]]
Abstraktion in eine Funktion, für die Modularität und Wiederverwendung wäre ideal.
>>> li
['apple','orange','pear','tomato']>>>>>>def slice_and_dice(fruit, fruits):...if fruit in fruits:... slice =[fr for fr in l1[:fruits.index(fruit)+1]]...return slice
...>>> slice_and_dice('pear', li)['apple','orange','pear']
Euer [fr-fr, in l1[:Früchte.index(Obst)+1]] kann kürzer geschrieben als l1[:Früchte.index(Obst)+1]. Die list comprehension hat hier keinen nutzen.
Es könnte auch kürzer sein, wenn ich die Bedingung innerhalb es, den nutzen, den ich habe für die Liste Verstehens ist einfacher zu Lesen, nicht für alle gleich.
wie ist eine überflüssige code leichter zu Lesen?
Ahh, cool, ich sehe, was du jetzt meinst. Ich habe falsch verstanden, was du meintest vor. Beschlossen, re-schreiben-Spaß mit Ihrem Rat fpaste.org/181051/14229894
use-Liste der slice-Methode
Mit exception-handling, wenn element nicht in der Liste vorhanden.
wenn das element in der Liste vorhanden
target_index = len(l1)
- Sie konnte einfachtarget_index = None
None
Arbeit..Können Sie erstellen eine benutzerdefinierte generator-Funktion, die auf jedem durchsuchbar, nicht nur Listen - obwohl für Ihre Beispiel
list.index
, exception handling und Hack-Ordnung ist...Ausgabe:
Gut, ich war daran interessiert, wie schnell jeder Lösung ist. Hier ist der code und Einschätzungen:
Ausgabe:
dropwhile_jon
- Sie müssen erst in eine Liste, damit Sie vergleichen äpfel mit äpfel - sonst ist der test nur die Initialisierung der generator-FunktionEs ist ein
dropwhile
imitertools
dass Sie können verwenden Sie zum filtern der Elemente nach Ihrer Wahl und dann kann man sich mit minus beide, Sie bekommen, was Sie wollen :Wird es o/p wie :
Abstraktion in eine Funktion, für die Modularität und Wiederverwendung wäre ideal.