簡體   English   中英

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', '.'} 因此,您的設置操作不會排除'a.'

這是因為set將遍歷輸入,並且字符串的迭代是通過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

差異(*其他)。 設置-其他-...
返回一個新集合,其中集合中的元素不在其他集合中。

行為可以更清楚地看到如下

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'}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM