我正在尝试检查一个列表中的名称或缩写是否存在。
我有2个类似的列表:
l1 = ["JACK", "JOHN", "A", "PAUL", "STEVE"]
l2 = ["J", "ANN", "JACK", "STEVEN", "P"]
在上面的列表中,来自l1的“ JACK”和“ JOHN”都与l2中的初始“ J”匹配,来自l1的“ JACK”与l2中的“ JACK”匹配。 l1中的“ A”也与l2中的“ ANN”匹配。与“ PAUL”和“ P”类似,但“ STEVE”和“ STEVEN”不匹配。因此结果应为“未完全匹配”。
但是如果l1没有“ STEVE”并且像这样:
l1 = ["JACK", "JOHN", "A", "PAUL"]
由于“ STEVE”或“ S”在l2中都不存在,并且所有其他与结果匹配的项目都应为“完全匹配”。
因此,我必须让l1中的所有项完全存在或作为l2中的首字母,但是不必将l2中的所有项都包含在l1中。
我尝试了其他类似问题的代码,但没有一个得到确切的结果。他们输出的结果是肯定的,因为它们要么只匹配所有项目的首字母,要么匹配甚至不匹配“ STEVE”和“ STEVEN”。
我想这可以通过一条条件语句来完成,该条件语句检查一个列表中所有长度为1的所有项目与另一个列表中所有项目的第一个索引(以便任一列表中的任何首字母都与所有全名匹配) );和仅l1中的完整字符串以及l2中的完整字符串(以便仅l1中的完整名称与l2中的完整名称匹配)
请稍加说明,因为我只是初学者,而python是我的第一门编程语言。
编辑:按照Devesh的要求,我将所有尝试粘贴的代码粘贴下面。
for elem in l2 or elem in l1:
if (len(elem)) == 1:
print('yes')
if any(elem[0] for elem in l1) == any(elem[0] for elem in l2):
print("yes")
for elem in l1 or elem in l2:
if l1[elem][0] == l2[elem][0]:
print("yes")
for elem in l1:
if len(elem) == 1:
print([elem for elem in l1 if any(elem in x for x in l2)])
print([elem for elem in l2 if any(elem in x for x in l1)])
for b in l2:
for a in l1:
if a in b or b in a:
present.add(b)
break
else:
notPresent.add(b)
print(present)
print(notPresent)
答案 0 :(得分:1)
这是我刚刚在旅途中写的东西。检查它是否适合您。这段代码可以进一步简化,但这是您的工作;)
l1 = ["JACK", "JOHN", "A", "PAUL", "STEVE"]
l2 = ["J", "ANN", "JACK", "STEVEN", "P"]
i = 0
length1 = len(l1)
length2 = len(l2)
for first in l1:
count = 0
for second in l2:
count += 1
if len(second) == 1:
if first[0] == second:
break
elif len(first) == 1:
if first == second[0]:
break
else:
if first == second:
break
if count == length2:
i = 1
if i == 1:
print("Not Match")
else:
print("Match")
答案 1 :(得分:1)
如果我正确理解了您的问题,请尝试以下操作:
从l2创建2个列表,其中1个仅带有缩写以检查l1,其中 长度大于1。
以l2开头的其他列表,用于检查l1中length = 1的项目。
代码:
l1 = ["JACK", "JOHN", "A", "PAUL", "STEVE"]
l2 = ["J", "ANN", "JACK", "STEVEN", "P"]
one_letter = [x for x in l2 if len(x)==1]
first_letter = [x[0] for x in l2 if len(x)>1]
l3=[]
for x in l1:
if len(x)>1:
if x[0] in one_letter:
l3.append(x)
else:
if x in first_letter or x in l2:
l3.append(x)
print(l3)
更短版本:
l4 = [x if x[0] in one_letter else x if x in first_letter or x in l2 else '' for x in l1]
l4.remove('')
输出:
['JACK', 'JOHN', 'A', 'PAUL']
答案 2 :(得分:1)
您可以简单地遍历list(l1)并检查l2中是否存在该元素,如果不存在,则检查是否存在第一个字符。如果没有,您可以简单地返回。
l1 = ["JACK", "JOHN", "A", "PAUL", "STEVEN"]
l2 = ["J", "ANN", "JACK", "STEVEN", "P"]
def compare(l1, l2):
for i in l1:
if not (i in l2 or i[0] in l2):
if len(i) == 1:
is_matched = False
for j in l2:
if ( j[0] == i):
is_matched = True
if not is_matched:
return "not matched"
else:
return "not matched"
return "matched"
print compare(l1, l2)