#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')