Непризнание строки при ссылке на элемент списка

#python

#python

Вопрос:

Мне нужно проверить, какие элементы первого списка отображаются во втором.

Сначала я создаю оба списка, добавляя элементы,

 my_file = open("/nfs/pic.es/user/c/cperez/pnfsid_type2_unclassified.txt", "r")
with open('/nfs/pic.es/user/c/cperez/pnfsid_type2_unclassified_short.txt') as f:
    unclassified = f.read().splitlines()

fullpaths = open("/nfs/pic.es/user/c/cperez/path_oct_nov.out", "r")
with open('/nfs/pic.es/user/c/cperez/path_oct_nov.out') as f2:
    full_paths = f2.read().splitlines()
  

Затем я запускаю все индексы ‘full_paths’, чтобы проверить, находится ли элемент ‘неклассифицированный [4]’ (тип str) в ‘full_paths’

 N=len(unclassified)
M=len(full_paths)

print(unclassified[4])

  

Вывод:

  SusyAnalysis
  

Если я ссылаюсь на это как на элемент списка, это не дает соответствия,

 
for j in range(0,M):
    if unclassified[4] in full_paths[j]:
        print(i,j,'yes')

  

Но, ссылаясь на нее как на строку, это «SusyAnalysis», работает правильно,

 
print(unclassified[4])

for j in range(0,M):
    if 'SusyAnalysis' in full_paths[j]:
        print(i,j,'yes')

  

Вывод:

   SusyAnalysis
0 658062 yes
0 759090 yes
0 989630 yes
0 1004369 yes
0 1236539 yes
0 1421179 yes
  

Я подозреваю, что основная проблема заключается в пустом пространстве между строками в основном неклассифицированном списке

 ['  zabai.bde389f10d8fd3aed35fae28c5265f4b9505fab2', '  crab_92X_newL1_RegForVBF_ThreeJets_allTauCombinations_HLTPhysics1', '  CITo2Mu_M2000_CUETP8M1_Lam16TeVConLL_13TeV_Pythia8_Corrected-v3', '  2018-06-19_DevTools_80X_Hpp_v1', '  SusyAnalysis', '  ZprimeToBBbar_M_2500', '  monoZ_2016_data_two_Lepton_final', '  XeXe2017_default_98_4', '  memOutput_CarmenTrial4_28Aug2017', '  v6_SM']
  

почему она не распознается как элемент списка строк? Или связано с пробелами между элементами списка?

Комментарии:

1. У вас есть дополнительная несвязанная ошибка. Вы открываете файлы дважды. Пожалуйста, удалите строки перед with операторами, поскольку они не используются и не закрываются.

Ответ №1:

Проблема заключается в пробелах внутри строки, ' SusyAnalysis' это не то же самое, что 'SusyAnalysis' . Чтобы исправить это, вы можете удалить элемент списка в операторе if:

 for j in range(0,M):
    if unclassified[4].strip() in full_paths[j]:
        print(i,j,'yes')