我定义了两个变量list和tuple,我试图找到它的交集。在一种情况下,事情按照我的预期工作,但在第二次交叉路口失败,我本来期望它通过。有人可以为我指出明显的事情吗?
鲍勃
# Test results in 'Match' as expected
a = ['*']
b = ('*', 'APR', 'Line')
if list(set(a) & set(b)):
print ('Match')
# Test result DOES NOT result in 'Match' whcih was not expected
a = ['APR, SIGEVENT']
b = ('*', 'APR', 'Line')
if list(set(a) & set(b)):
print ('Match')
答案 0 :(得分:4)
您的第二个示例无法匹配,因为'APR, SIGEVENT'
是一个字符串。 Python不会拆分该字符串并为您检查字符串内容。
设置交叉点要求元素之间相等,包含不是其中一个选项。换句话说,由于'APR' == 'APR, SIGEVENT'
不成立,因此即使'APR' in 'APR, SIGEVENT'
为真,两个集之间也没有交集。
您必须将a
拆分为单独的字符串:
a = ['APR, SIGEVENT']
b = ('*', 'APR', 'Line')
if set(el.strip() for substr in a for el in substr.split(',')).intersection(b):
# intersection between text in a and elements in b
这假设你真的想在这里a
中测试以逗号分隔的字符串中的元素。
请注意,对于交叉点测试,将生成的交集集转换回列表是相当过分的。
演示:
>>> a = ['APR, SIGEVENT']
>>> b = ('*', 'APR', 'Line')
>>> set(el.strip() for substr in a for el in substr.split(',')).intersection(b)
set(['APR'])