我编写了一个代码,只要找到匹配项,它就会将组列表更新为 1。比较是从列表 inp 和列表 a 中逐个元素完成的。组列表正确显示输出,但我无法访问单个列表元素。当我将函数应用为 all(groups) 时,我想确定哪些所有索引都将输出为 True
def zerolistmaker(n):
listofzeros = [0] * n
return listofzeros
inp=['6161', '03901', '81750', 'BRIN', '610415', 'WADD', '045211', '041577']
a=[['JOSH', 'M', 'WADD', ' ', '41577', '041577'], ['BRIN', 'None', 'WADD', 'None', '045211', '045211'], ['BRIN', 'None', 'WADD', 'None', '81750', '6161'], ['BRIN', 'None', 'WADD', 'None', 'None', '610415770488']]
stopwords=[' ','None']
for i in a:
#print(i)
while(' ' in i) :
i.remove(' ')
while('None' in i) :
i.remove('None')
#.remove('None')
#print(i)
groups=zerolistmaker(len(i))
#print(groups)
for k in range(0,len(i)):
for j in range(0,len(inp)):
if i[k] == inp[j]:
#print("String match: ",i[k])
groups[k]= 1
print(groups)
t=[all(groups)]
print(t)
打印(组)的实际输出:
[0, 0, 1, 0, 1]
[1, 1, 1, 1]
[1, 1, 1, 1]
[1, 1, 0]
当我尝试执行时print(groups[3])
,它将第三列垂直设为 1,1,1,0。我想将组列表迭代为 group[0] 输出,如下所示,然后我需要将所有函数应用于每个列表。将组转换为 2D 列表,[[0, 0, 1, 0, 1],[1, 1, 1, 1],[1, 1, 1, 1], [1 ,1 0]]
如果可能的话,如下所示:
for i in groups:
if all(groups[i])==True:
print("perfect match")
else:
print("mismatch in records")
请建议我在这段代码中做错了什么,任何以更好的方式实现结果的即兴创作都值得赞赏。
我认为以下代码创建了groups
您想要的:
inp=['6161', '03901', '81750', 'BRIN', '610415', 'WADD', '045211', '041577']
a=[['JOSH', 'M', 'WADD', ' ', '41577', '041577'], ['BRIN', 'None', 'WADD', 'None', '045211', '045211'], ['BRIN', 'None', 'WADD', 'None', '81750', '6161'], ['BRIN', 'None', 'WADD', 'None', 'None', '610415770488']]
stopwords=[' ','None']
wordlists = [[w for w in words if not w in stopwords] for words in a] #cleanup a
groups = [[1 if word in inp else 0 for word in wordlist] for wordlist in wordlists]
要测试它:
for group in groups:
print(group)
输出:
[0, 0, 1, 0, 1]
[1, 1, 1, 1]
[1, 1, 1, 1]
[1, 1, 0]
就您的原始代码而言,这里有一个更改最少的修复程序。主要思想是在主循环groups
之外定义并将较小的列表附加到它(而不是仅仅打印它们,这不会保存它们):
def zerolistmaker(n):
listofzeros = [0] * n
return listofzeros
inp=['6161', '03901', '81750', 'BRIN', '610415', 'WADD', '045211', '041577']
a=[['JOSH', 'M', 'WADD', ' ', '41577', '041577'], ['BRIN', 'None', 'WADD', 'None', '045211', '045211'], ['BRIN', 'None', 'WADD', 'None', '81750', '6161'], ['BRIN', 'None', 'WADD', 'None', 'None', '610415770488']]
stopwords=[' ','None']
groups = [] #change1
for i in a:
while(' ' in i) :
i.remove(' ')
while('None' in i) :
i.remove('None')
group=zerolistmaker(len(i))
for k in range(0,len(i)):
for j in range(0,len(inp)):
if i[k] == inp[j]:
group[k]= 1 #change2
groups.append(group) #change3
#test:
for group in groups:
print(group)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句