Python 设置字符串的差异
Python set difference of strings
我在 Python 中创建不同的字符串集时遇到了以下特殊行为:
set(['a', 'b']) - set(['a']) # results in {'b'} as expected
set(['a', 'b']) - set('a') # results in {'b'} as expected
set(['a.', 'b']) - set(['a.']) # results in {'b'} as expected
set(['a.', 'b']) - set('a.') # surprisingly results in {'a.', 'b'}!
为什么最后一个例子'a.'没有从集合中减去?由于第二种情况和第四种情况之间的区别是点,我认为这是罪魁祸首。使用双引号会产生相同的行为。
您的最后一组被解释为 {'a', '.'}
。所以你的set操作不会排除'a.'
因为set会遍历输入,而string的遍历是char
set('a.')
将字符串解释为字符列表 ['a','.]
,结果是 {'.', 'a'}
set(['a.', 'b'])
将列表解释为 ['a.', 'b']
,结果是 {'a.', 'b'}
现在,当您取集合差异时,结果是 {'a.', 'b'}
,因为第一组和第二组的集合差异是第一组本身,因为两组中不存在共同元素。
来自文档:https://docs.python.org/3/library/stdtypes.html#set-types-set-frozenset
difference(*others) . set - other - ...
Return a new set with elements in the set that are not in the others.
下面的行为可以更清楚地看到
In [1]: set('a.')
Out[1]: {'.', 'a'}
In [2]: set(['a.', 'b'])
Out[2]: {'a.', 'b'}
In [3]: set(['a.', 'b']) - set('a.')
Out[3]: {'a.', 'b'}
我在 Python 中创建不同的字符串集时遇到了以下特殊行为:
set(['a', 'b']) - set(['a']) # results in {'b'} as expected
set(['a', 'b']) - set('a') # results in {'b'} as expected
set(['a.', 'b']) - set(['a.']) # results in {'b'} as expected
set(['a.', 'b']) - set('a.') # surprisingly results in {'a.', 'b'}!
为什么最后一个例子'a.'没有从集合中减去?由于第二种情况和第四种情况之间的区别是点,我认为这是罪魁祸首。使用双引号会产生相同的行为。
您的最后一组被解释为 {'a', '.'}
。所以你的set操作不会排除'a.'
因为set会遍历输入,而string的遍历是char
set('a.')
将字符串解释为字符列表 ['a','.]
,结果是 {'.', 'a'}
set(['a.', 'b'])
将列表解释为 ['a.', 'b']
,结果是 {'a.', 'b'}
现在,当您取集合差异时,结果是 {'a.', 'b'}
,因为第一组和第二组的集合差异是第一组本身,因为两组中不存在共同元素。
来自文档:https://docs.python.org/3/library/stdtypes.html#set-types-set-frozenset
difference(*others) . set - other - ...
Return a new set with elements in the set that are not in the others.
下面的行为可以更清楚地看到
In [1]: set('a.')
Out[1]: {'.', 'a'}
In [2]: set(['a.', 'b'])
Out[2]: {'a.', 'b'}
In [3]: set(['a.', 'b']) - set('a.')
Out[3]: {'a.', 'b'}