我有一个清单
listOfStations = ['FSTL40503', 'LHSL40503', 'WEHL40503', 'BKGL40503', 'DDKL40503', 'RNML40503', 'PFLL40503', 'GRYL40503']
我想先检查FSTL40503是否排在首位,然后PFLL40503排在第二位。我现在可以找到两者是否存在,但它不符合我想要的顺序。
toBeChecked=['PFLL40503','FSTL40503']
if all(item in listOfStations for item in toBeChecked):
print "Both stations found in order, in list"
目前正在打印它不应该做的,因为它不是正确的路线。
我还试图加入列表中的两个条目来制作一个字符串并检查,但我认为我很困惑需要做的事情:
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])
答案 0 :(得分:7)
你可以获得一个超过listOfStations
的迭代器,它会在搜索时使用列表,所以它永远不会考虑相同的元素两次。
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
答案 1 :(得分:1)
您可以查看每个电台的索引:
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
答案 2 :(得分:0)
我发现以下相当优雅:
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
我们的想法是检查第一个元素是否存在于列表开头和第二个元素定义的子列表中。
我假设:
toBeChecked
列表。