繁体   English   中英

Python-检查列表中的字符串/缩写是否在另一个列表中

[英]Python - Check if strings/initials in a list are present in another list

我正在尝试检查一个列表中的名称或缩写是否存在于另一列表中。

我有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中的首字母,但是并不需要l1中来自l2的所有项。

我尝试了其他类似问题的代码,但没有一个得到确切的结果。 他们输出的结果是肯定的,因为它们要么只匹配所有项目的首字母,要么匹配甚至不匹配“ 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)

这是我在旅途中写的东西。 检查它是否适合您。 该代码可以进一步简化,但这是您的工作;)

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. 从l2创建2个列表,仅使用首字母创建1个列表以检查长度大于1的l1。

  2. 以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']

您可以简单地遍历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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM