J'ai une liste
listOfStations = ['FSTL40503', 'LHSL40503', 'WEHL40503', 'BKGL40503', 'DDKL40503', 'RNML40503', 'PFLL40503', 'GRYL40503']
Je veux vérifier que FSTL40503 vient en premier, puis PFLL40503 vient en deuxième. Je peux actuellement trouver si les deux existent, mais cela ne respecte pas l'ordre de ce que je veux.
toBeChecked=['PFLL40503','FSTL40503']
if all(item in listOfStations for item in toBeChecked):
print "Both stations found in order, in list"
Cela imprime actuellement ce qu'il ne devrait pas faire car ce n'est pas la bonne route.
J'ai également essayé de joindre les deux entrées de la liste pour créer une chaîne et vérifier, mais je pense que je suis confus sur ce qui doit être fait:
z= ''.join(toBeChecked)
print z
for char in z:
if char not in listOfStations:
print listOfStations
continue
else:
listOfStations = listOfStations[listOfStations.index(char) + 1:]
confirmedTrainList.append(trainList[i])
3 réponses
Vous pouvez obtenir un itérateur sur listOfStations
qui consommera la liste lors de sa recherche, donc il ne considérera jamais le même élément deux fois.
def contains_in_order(container, items):
it = iter(container)
return all(item in it for item in items)
should_not_work = ['PFLL40503', 'FSTL40503']
should_work = ['FSTL40503', 'PFLL40503']
listOfStations = ['FSTL40503', 'LHSL40503', 'WEHL40503', 'BKGL40503', 'DDKL40503', 'RNML40503', 'PFLL40503', 'GRYL40503']
print(contains_in_order(listOfStations, should_not_work))
# False
print(contains_in_order(listOfStations, should_work))
# True
Je trouve les éléments suivants assez élégants:
def in_order_exist(lst, to_find):
try:
lst[:lst.index(to_find[1])].index(to_find[0])
return True
except:
return False
print(in_order_exist(listOfStations, toBeChecked)) # True
L'idée est de vérifier si le premier élément existe dans la sous-liste définie par le début de la liste et le deuxième élément.
Je suppose:
- deux éléments seulement (en raison du titre de l'OP)
- ordre correct de la liste
toBeChecked
.
Vous pouvez vérifier l'index de chaque station:
listOfStations = ['FSTL40503', 'LHSL40503', 'WEHL40503', 'BKGL40503', 'DDKL40503', 'RNML40503', 'PFLL40503', 'GRYL40503']
toBeChecked=['PFLL40503','FSTL40503']
def check(to_check, big_list):
try:
return big_list.index(to_check[0]) < big_list.index(to_check[1])
except ValueError:
return False
check(['PFLL40503','FSTL40503'], listOfStations)
# False
check(['LHSL40503', 'GRYL40503'], listOfStations)
# True
Questions connexes
De nouvelles questions
python
Python est un langage de programmation multi-paradigme, typé dynamiquement et polyvalent. Il est conçu pour être rapide à apprendre, comprendre, utiliser et appliquer une syntaxe propre et uniforme. Veuillez noter que Python 2 est officiellement hors support à partir du 01-01-2020. Néanmoins, pour les questions Python spécifiques à la version, ajoutez la balise [python-2.7] ou [python-3.x]. Lorsque vous utilisez une variante Python (par exemple, Jython, PyPy) ou une bibliothèque (par exemple, Pandas et NumPy), veuillez l'inclure dans les balises.