Из ваших комментариев здесь, мне кажется, что символ 'C'
в вашем списке компонентов важен, потому что вы, кажется, хотите различать, например, 'C11'
и 'C1'
.
Кстати,Я полностью согласен с @martineau, чтобы всегда использовать стандартное именование в Python.CamleCasingLikeThis
должен быть зарезервирован только для имен классов, и вы должны использовать lower_case_like_this
для переменных в целом, без заглавных букв.
Давайте рассмотрим, как это можно сделать.
my_dict = {'C99': 1, 'C15': 1, 'C1': 1}
component_list = ['C1C15C99', 'C15', 'C17']
result = []
# first convert my_dict to a list of numbers ['99', '15', '1']
elements = [element[1:] for element in my_dict.keys()]
# for every component you want to characterize
for component in component_list:
# a flag to know if we found any element in this component
found = False
# split the string by the 'C' character to get its sub element numbers
# for example 'C1C15C99'.split('C') == ['', '1', '15', '99']
for sub_elem in component.split('C'):
# make sure sub_elem is not an empty string
if sub_elem:
# check if this sub element exists in elements
if sub_elem in elements:
found = True
# exit the inner loop
break
# convert the boolean to int (either 0 or 1)
# and finally add this to the result
result.append(int(found))
print(result)
# [1, 1, 0]
До сих пор я предполагал, что my_dict
может принимать только отдельные компоненты, такие как C1 или C6но не такие композиты, как C12C14.Из вашего последнего комментария кажется, что это не так.Внезапно выясняются еще две вещи: my_dict
может содержать комбинацию компонентов, и при проверке наличия одного в другом порядок не имеет значения.Например, C1C2 существует в C5C2C7C1, но C1C2 не существует в C1, поскольку должны присутствовать оба подкомпонента.
Это очень важно и полностью меняет проблему.Для дальнейшего использования, пожалуйста, не забудьте подробно описать вашу проблему с самого начала.
my_dict = {'C99': 1, 'C15': 1, 'C1': 1, 'C1C55C99': 1, 'C99C6': 1, 'C2C4C18': 1}
component_list = ['C1C15C99', 'C15', 'C17', 'C8C6C80C99', 'C6', 'C55C2C4C18C7', 'C55C1', 'C18C4']
result = []
# first convert my_dict to a list of lists containing singular elements
elements = [element.split('C')[1:] for element in my_dict.keys()]
# elements = [['2', '4', '18'], ['99'], ['1'], ['15'], ['99', '6'], ['1', '55', '99']]
for component in component_list:
found = False
# gather the sub elements for this components
comp_elements = component.split('C')[1:]
for composite_element in elements:
element_exists = True
# check if every singular element in this element is present in component
for signular_element in composite_element:
if signular_element not in comp_elements:
element_exists = False
break
if element_exists:
found = True
break
result.append(int(found))
print(result)
# [1, 1, 0, 1, 0, 1, 1, 0]