我需要检查第一个列表中的哪些元素出现在第二个列表中。
首先,我通过添加元素来创建这两个列表,
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"索引,以检查元素"unclassified[4]"(str-type(是否在"full_path"中
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']
为什么它不能被识别为字符串列表元素?或者与列表元素之间的空格有关?
问题是字符串中的空白,' SusyAnalysis'
与'SusyAnalysis'
不同。要解决此问题,您可以剥离if语句中的列表项:
for j in range(0,M):
if unclassified[4].strip() in full_paths[j]:
print(i,j,'yes')