首页 > 解决方案 > 如何检查列表中的项目是否可以作为另一个列表中的项目找到

问题描述

我的问题是我想检查此列表中的项目是否

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 = []的列表中,否则它应该将它附加到另一个列表中,不正确的响应 = []

以下是我针对上述问题的代码。已经导入文件并使用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()

现在我得到的错误是列表超出索引,所以我想知道如何通过将它们与元素列表进行比较来在列表中附加正确的项目

标签: pythonpython-3.xlistfor-loopappend

解决方案


集合更适合处理这个问题:

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(或&)又名:两个集合中都有哪些元素?

区别:set.difference(或-)又名:哪些元素仅在第一组中?


推荐阅读