1

我是 python 的新手,并且从 Python 的简短课程和一些谷歌搜索中把它放在一起。我正在尝试比较两个字符串列表,以查看列表 A 的所有项目是否都在列表 B 中。如果列表 B 中没有任何项目,我希望它打印一条通知消息。

List_A = ["test_1", "test_2", "test_3", "test_4", "test_5"]
List_B = ["test_1", "test_2", "test_3", "test_4"]

代码:

for item in List_A:
     match = any(('[%s]'%item) in b for b in List_B)
     print "%10s %s" % (item, "Exists" if match else "No Match in List B")

输出:

test_1 列表 B 中没有匹配项

test_2 列表 B 中没有匹配项

test_3 列表 B 中没有匹配项

test_4 列表 B 中没有匹配项

test_5 列表 B 中没有匹配项

前四个应该匹配但不匹配,第五个是正确的。我不知道为什么它不起作用。有人可以告诉我我做错了什么吗?任何帮助将不胜感激。

4

4 回答 4

5
>>> '[%s]'%"test_1"
'[test_1]'

您正在检查 "[test_1]" 是否是某个字符串 in 的子字符串list_B,依此类推。

这应该有效:

for item in List_A:
     match = any(item in b for b in List_B)
     print "%10s %s" % (item, "Exists" if match else "No Match in List B")

但是由于您并不是真的在寻找子字符串,因此您应该进行测试in,仅此而已:

for item in List_A:
     match = item in List_B
     print "%10s %s" % (item, "Exists" if match else "No Match in List B")

但您可以简单地使用设置差异:

print set(List_A) - set(List_B)
于 2013-06-10T06:41:34.527 回答
0
List_A = ["test_1", "test_2", "test_3", "test_4", "test_5"]
List_B = ["test_1", "test_2", "test_3", "test_4"]

for item in List_A:
     match = any((str(item)) in b for b in List_B)
     print "%10s %s" % (item, "Exists" if match else "No Match in List B")

将输出

test_1 Exists
test_2 Exists
test_3 Exists
test_4 Exists
test_5 No Match in List B
于 2013-06-10T11:15:58.887 回答
0

您可以转换List_B为集合,因为集合提供 O(1) 查找:

尽管请注意,集合只允许您存储可散列(不可变)的项目。如果List_B包含可变项,则首先将它们转换为不可变项,如果不可能,则排序List_B并使用bisect模块对 sorted 进行二进制搜索List_B

List_A = ["test_1", "test_2", "test_3", "test_4", "test_5"]
List_B = ["test_1", "test_2", "test_3", "test_4"]
s = set(List_B)
for item in List_A:
    match = item in s  # check if item is in set s
    print "%10s %s" % (item, "Exists" if match else "No Match in List B")

输出:

test_1 Exists
test_2 Exists
test_3 Exists
test_4 Exists
test_5 No Match in List B
于 2013-06-10T06:46:21.643 回答
0

只需使用一个简单的 for 循环:

List_A = ["test_1", "test_2", "test_3", "test_4", "test_5"]
List_B = ["test_1", "test_2", "test_3", "test_4"]
for i in List_A:
    print "{:>10} {}".format(i, "Exists" if i in List_B else "No Match in List B")
于 2013-06-10T06:46:32.933 回答