Python - 设置交集不按预期工作

时间:2014-04-02 16:12:25

标签: python python-3.x set intersection

我定义了两个变量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')

1 个答案:

答案 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'])