列表A:
[('Harry', 'X', 'A'),
('James', 'Y', 'G'),
('John', 'Z', 'D')]
列表B:
^{pr2}$基本上,我必须比较列表A中的第三个元素(for x in listA -> x[2]
),并检查列表B中是否有相同的元素(for y in listB, x[2] == y[2]
)的列表,但我对此感到茫然。在
我的想法是从列表B中的每个列表中获取第三个元素,将它们放入一个新列表中,然后删除“;”,这样我就可以更轻松地访问每个元素。在
for x in listB:
j = x[2]
j = j.strip().split(', ')
for k in j:
FinalB.append(k)
FinalB = [(k[1:-1].split(";")) for k in FinalB]
然后我从列表A的每个列表中获取第三个元素,并将它们与FinalB的每个列表中的元素进行比较:如果有匹配,我将获得FinalB中元素的索引(匹配的元素),使用该索引访问listB中的列表,并获得列表B中列表的第一个元素(基本上,从第三个元素中我知道每个用户都有相同的名称)
目前我的代码:
FinalB= []
DomainsList = []
for x in listA:
j = x[2]
j = j.strip().split(', ')
for k in j:
FinalB.append(k)
FinalB = [(k[1:-1].split(";")) for k in FinalB]
for y in listA:
for z in FinalB:
for k in z:
if y[2] == k:
m = FinalB.index(z)
DomainsList.append([listA[m][0],listB[m][0]])
return DomainsList
是的,这是不起作用的(没有错误,我可能只是做了一个绝对错误的方式),我不知道我做错了什么和哪里。在
首先,我认为处理
'(C; D; E)'
的更好方法是将其更改为'CDE'
,因此第一个循环变成:我们获取每个字符串并只保留字母字符,因此最终得到:
^{pr2}$这意味着我们可以使用
listA[x][2] in FinalB[y]
来测试是否有匹配项:我不得不调整
^{4}$append()
的参数以选择正确的元素,因此我们最终得到:有用的是,如果不是
'(C; D; E)'
,而是'(foo; bar; baz)'
,那么使用just one tweak代码也可以起作用:剩下的代码和以前一样工作。在
从背景和细节开始提问总是有帮助的。 python版本也可以发挥作用。在
您为我们提供的数据结构是非常可疑的-尤其是listB中每个元组中的第三个元素…为什么要有一个string元素然后像这样定义它(C;D;E)'??在
即使我不明白你从何而来,或者这意味着什么,在post中没有提供上下文,这段代码应该能让你达到目的。在
它将给您一个元组列表(listC),每个元组有两个元素。元素1具有来自listA的名称,元素2具有来自listB的名称,它们具有post中描述的匹配项。 注意:目前,匹配只是通过一个find来完成,这将与所提供的细节完美结合,但是如果您可能有可能导致误报的数据,或者如果您想忽略case,则可能需要更改此项以适合您的需要。在
这给了你。 [('Harry','Helen'),('Harry','Alan'),('John','Victor')]
相关问题 更多 >
编程相关推荐