как проверить, можно ли найти элементы в списке как элемент в другом списке - PullRequest
0 голосов
/ 26 сентября 2018

Мой вопрос: я хочу проверить, можно ли в этом списке найти пунктов

input_list = ['Calcium','Gold','Lithium','Boron','Carbon']` 

 elements =  ['Hydrogen','Helium','Lithium','Beryllium','Boron','Carbon','Nitrogen',
              'Oxygen','Fluorine','Neon','Sodium', 'Magnesium','Aluminum','Silicon',
              'Phosphorus','Sulfur','Chlorine','Argon', 'Potassium', 'Calcium']

, если так,элемент в input_list находится в списке элементов , тогда он должен добавить этот элемент в другой список с именем correct_response = [] , иначе он должен добавить егов другой список invalid_response = []

Ниже приведен мой код для вышеуказанного вопроса.Уже импортировав файл и используя метод readline () , вы можете получить строку в строке за раз.

elements1_file = open('elements1_20.txt','r')
counter = 0
while elements_text:
      for ele in elements_text:
          if ele.lower() in input_list[counter]:
             correct_response.append(input_list[counter])
          else:
               incorrect_response.append(input_list[counter])
      counter += 1
elements_text = elements1_file.readline().strip()

Теперь ошибка, которую я получаю - это список вне индекса, поэтому я хочу знать, как добавить правильные элементы в список, сравнив их со списком элементов

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

простой цикл O (n) для завершения цикла

correct_response=list()
incorrect_response=list()

for i in input_list:
  if i in elements:
   correct.append(i)
  else:
   incorrect.append(i)
0 голосов
/ 26 сентября 2018

наборы гораздо лучше подходят для решения этой проблемы:

input_set = set( ['Calcium','Gold','Lithium','Boron','Carbon'] )

elements =  set(['Hydrogen','Helium','Lithium','Beryllium','Boron','Carbon','Nitrogen',
                 'Oxygen','Fluorine','Neon','Sodium', 'Magnesium','Aluminum','Silicon',
                 'Phosphorus','Sulfur','Chlorine','Argon', 'Potassium', 'Calcium'])

correct = list(input_set & elements) 
incorrect = list(input_set - elements)

print(correct)
print(incorrect)

Вывод:

['Boron', 'Lithium', 'Calcium', 'Carbon']
['Gold']

Пересечение: set.intersection (или &) aka: какие элементы находятся в обоих наборах?

Разница: set.difference (или -) aka: какие элементы есть только в первом наборе?

...