pythonset是什么类型的游戏_Python集合(set)类型的操作
原文詳見:http://blog.csdn.net/business122/article/details/7541486
python的set和其他語言類似,?是一個無序不重復(fù)元素集,?基本功能包括關(guān)系測試和消除重復(fù)元素.?集合對象還支持union(聯(lián)合),?intersection(交),?difference(差)和sysmmetric?difference(對稱差集)等數(shù)學(xué)運算.
sets?支持?x?in?set,?len(set),和?for?x?in?set。作為一個無序的集合,sets不記錄元素位置或者插入點。因此,sets不支持?indexing,?slicing,?或其它類序列(sequence-like)的操作。
下面來點簡單的小例子說明把。
>>>?x?=?set('spam')
>>>?y?=?set(['h','a','m'])
>>>?x,?y
(set(['a',?'p',?'s',?'m']),?set(['a',?'h',?'m']))
再來些小應(yīng)用。
>>>?x?&?y?#?交集
set(['a',?'m'])
>>>?x?|?y?#?并集
set(['a',?'p',?'s',?'h',?'m'])
>>>?x?-?y?#?差集
set(['p',?'s'])
記得以前個網(wǎng)友提問怎么去除海量列表里重復(fù)元素,用hash來解決也行,只不過感覺在性能上不是很高,用set解決還是很不錯的,示例如下:
>>>?a?=?[11,22,33,44,11,22]
>>>?b?=?set(a)
>>>?b
set([33,?11,?44,?22])
>>>?c?=?[i?for?i?in?b]
>>>?c
[33,?11,?44,?22]
很酷把,幾行就可以搞定。
1.8 集合
集合用于包含一組無序的對象。要創(chuàng)建集合,可使用set()函數(shù)并像下面這樣提供一系列的項:
s?=?set([3,5,9,10])??????#創(chuàng)建一個數(shù)值集合
t?=?set("Hello")?????????#創(chuàng)建一個唯一字符的集合
與列表和元組不同,集合是無序的,也無法通過數(shù)字進(jìn)行索引。此外,集合中的元素不能重復(fù)。例如,如果檢查前面代碼中t集合的值,結(jié)果會是:
>>>?t
set(['H',?'e',?'l',?'o'])
注意只出現(xiàn)了一個'l'。
集合支持一系列標(biāo)準(zhǔn)操作,包括并集、交集、差集和對稱差集,例如:
a?=?t?|?s??????????#?t?和?s的并集
b?=?t?&?s??????????#?t?和?s的交集
c?=?t?–?s??????????#?求差集(項在t中,但不在s中)
d?=?t?^?s??????????#?對稱差集(項在t或s中,但不會同時出現(xiàn)在二者中)
基本操作:
t.add('x')????????????#?添加一項
s.update([10,37,42])??#?在s中添加多項
使用remove()可以刪除一項:
t.remove('H')
len(s)
set?的長度
x?in?s
測試?x?是否是?s?的成員
x?not?in?s
測試?x?是否不是?s?的成員
s.issubset(t)
s?<=?t
測試是否?s?中的每一個元素都在?t?中
s.issuperset(t)
s?>=?t
測試是否?t?中的每一個元素都在?s?中
s.union(t)
s?|?t
返回一個新的?set?包含?s?和?t?中的每一個元素
s.intersection(t)
s?&?t
返回一個新的?set?包含?s?和?t?中的公共元素
s.difference(t)
s?-?t
返回一個新的?set?包含?s?中有但是?t?中沒有的元素
s.symmetric_difference(t)
s?^?t
返回一個新的?set?包含?s?和?t?中不重復(fù)的元素
s.copy()
返回?set?“s”的一個淺復(fù)制
請注意:union(),?intersection(),?difference()?和?symmetric_difference()?的非運算符(non-operator,就是形如?s.union()這樣的)版本將會接受任何?iterable?作為參數(shù)。相反,它們的運算符版本(operator?based?counterparts)要求參數(shù)必須是?sets。這樣可以避免潛在的錯誤,如:為了更可讀而使用?set('abc')?&?'cbs'?來替代?set('abc').intersection('cbs')。從?2.3.1?版本中做的更改:以前所有參數(shù)都必須是?sets。
另外,Set?和?ImmutableSet?兩者都支持?set?與?set?之間的比較。兩個?sets?在也只有在這種情況下是相等的:每一個?set?中的元素都是另一個中的元素(二者互為subset)。一個?set?比另一個?set?小,只有在第一個?set?是第二個?set?的?subset?時(是一個?subset,但是并不相等)。一個?set?比另一個?set?打,只有在第一個?set?是第二個?set?的?superset?時(是一個?superset,但是并不相等)。
子?set?和相等比較并不產(chǎn)生完整的排序功能。例如:任意兩個?sets?都不相等也不互為子?set,因此以下的運算都會返回?False:ab。因此,sets?不提供?__cmp__?方法。
因為?sets?只定義了部分排序功能(subset?關(guān)系),list.sort()?方法的輸出對于?sets?的列表沒有定義。
運算符
運算結(jié)果
hash(s)
返回?s?的?hash?值
下面這個表列出了對于?Set?可用二對于?ImmutableSet?不可用的運算:
運算符(voperator)
等價于
運算結(jié)果
s.update(t)
s?|=?t
返回增加了?set?“t”中元素后的?set?“s”
s.intersection_update(t)
s?&=?t
返回只保留含有?set?“t”中元素的?set?“s”
s.difference_update(t)
s?-=?t
返回刪除了?set?“t”中含有的元素后的?set?“s”
s.symmetric_difference_update(t)
s?^=?t
返回含有?set?“t”或者?set?“s”中有而不是兩者都有的元素的?set?“s”
s.add(x)
向?set?“s”中增加元素?x
s.remove(x)
從?set?“s”中刪除元素?x,?如果不存在則引發(fā)?KeyError
s.discard(x)
如果在?set?“s”中存在元素?x,?則刪除
s.pop()
刪除并且返回?set?“s”中的一個不確定的元素,?如果為空則引發(fā)?KeyError
s.clear()
刪除?set?“s”中的所有元素
請注意:非運算符版本的?update(),?intersection_update(),?difference_update()和symmetric_difference_update()將會接受任意?iterable?作為參數(shù)。從?2.3.1?版本做的更改:以前所有參數(shù)都必須是?sets。
還請注意:這個模塊還包含一個?union_update()?方法,它是?update()?方法的一個別名。包含這個方法是為了向后兼容。程序員們應(yīng)該多使用?update()?方法,因為這個方法也被內(nèi)置的?set()?和?frozenset()?類型支持。
總結(jié)
以上是生活随笔為你收集整理的pythonset是什么类型的游戏_Python集合(set)类型的操作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: springboot 注解动态赋值_Sp
- 下一篇: 我国《匿名订阅通信服务技术规范》标准正式