Представьте, что вы выполнили эксперименты с использованием различных образцов материалов в последовательности. Вы закончили свои эксперименты, и вы удовлетворены результатами (это может занять несколько попыток), прежде чем вы начнете с другого материала образца, поэтому последовательности будут появляться после друг друга:
list_ex = ['Iron', 'Iron', 'Iron', 'Iron', 'Iron', 'Steel', 'Steel', 'Aluminium', 'Aluminium', 'Aluminium']
Введен еще один список с соответствующим названием quality
, чтобы различать хорошие и плохие измерения:
quality = ['BAD', 'BAD', 'BAD', 'GOOD', 'GOOD', 'BAD', 'GOOD', 'BAD', 'GOOD', 'GOOD']
, который применяется в понимании списка для исключения неверных измерений с использованием True
и False
:
qual = [True if _ == 'GOOD' else False if _ == 'BAD' else False for _ in quality]
Из этого примера вы видите, что одна последовательность материалов следует за другой без пересечения. Тем не менее, я хотел бы классифицировать данные, найдя начало и конец каждой последовательности, чтобы сделать что-то вроде этого:
list_iron = list_ex[start_iron:end_iron+1]
list_steel = list_ex[start_steel:end_steel+1]
list_alu = list_ex[start_alu:end_alu+1]
, что даст следующие результаты:
In[1]: list_iron
Out[1]: ['Iron', 'Iron', 'Iron', 'Iron', 'Iron']
In[2]: list_steel
Out[2]: ['Steel', 'Steel']
In[3]: list_alu
Out[3]: ['Aluminium', 'Aluminium', 'Aluminium']
Причина, по которой я хотел бы найти начало и конец, заключается в том, что я хотел бы использовать их для определения позиции других данных, которые основаны на них (спасибо, Мэтт Б., за указание на то, что мои истинные намерения были плохо сформулированы):
In[4]: freq_steel = frequency[start_steel:end_steel+1]
In[5]: freq_steel
Out[5]: [[100, 200, 300, 400, 500], [1000, 2000, 3000, 4000, 5000]]
Но поскольку одно из стальных измерений было плохим, в идеале я бы хотел:
In[6]: qual_steel = quality[start_steel:end_steel+1]
In[7]: qual_steel
Out[7]: [False, True]
In[8]: freq_steel[qual_steel]
Out[8]: [1000, 2000, 3000, 4000, 5000]
- Есть ли элегантный способ сделать это в Python?