1. 關於 python set 列表 差集的問題。

從源代碼看在set中增加一個元素,就可以看出set是根據hash表來索引數據,每個元素都計算出一個long類型的hash值。

另外一個優化就是內存分配:set_table_resize
每次增加元素時,如果原來分配數不夠,就一次增加一批,而不是一個一個增加。

static int set_add_key(register PySetObject *so, PyObject *key)
{
register long hash;
register Py_ssize_t n_used;

if (!PyString_CheckExact(key) ||
(hash = ((PyStringObject *) key)->ob_shash) == -1) {
hash = PyObject_Hash(key);
if (hash == -1)
return -1;
}
assert(so->fill <= so->mask); /* at least one empty slot */
n_used = so->used;
Py_INCREF(key); //插入元素引用+1
if (set_insert_key(so, key, hash) == -1) {
Py_DECREF(key);
return -1;
}
if (!(so->used > n_used && so->fill*3 >= (so->mask+1)*2))
return 0;
return set_table_resize(so, so->used>50000 ? so->used*2 : so->used*4);
}

static int set_insert_key(register PySetObject *so, PyObject *key, long hash)
{
register setentry *entry;
typedef setentry *(*lookupfunc)(PySetObject *, PyObject *, long);

assert(so->lookup != NULL);
entry = so->lookup(so, key, hash); //這里根據hash值來查找元素
if (entry == NULL)
return -1;
if (entry->key == NULL) {
/* UNUSED */
so->fill++;
entry->key = key;
entry->hash = hash;
so->used++;
} else if (entry->key == mmy) {
/* DUMMY */
entry->key = key;
entry->hash = hash;
so->used++;
Py_DECREF(mmy);
} else {
/* ACTIVE */
Py_DECREF(key);
}
return 0;
}

2. python求列表交集的方法匯總

python求列表交集的方法匯總
本文實例匯總了python求列表交集的方法。分享給大家供大家參考。具體方法如下:
交集對於給定的兩個集合A 和 集合B 的交集是指含有所有既屬於 A 又屬於 B 的元素,而沒有其他元素的集合叫交集了,下面給出幾個python求列表交集例子供大家參考。
方法1
遍歷b1,如果某個元素同時也存在於b2中,則返回
代碼如下:b1=[1,2,3]
b2=[2,3,4]
b3 = [val for val in b1 if val in b2]
print b3

運行結果如下
代碼如下:[2, 3]

方法2
把列表轉換為集合,利用集合操作符求出交集,然後再轉換回列表類型
代碼如下:b1=[1,2,3]
b2=[2,3,4]
b3=list(set(b1) & set(b2))
print b3

運行結果如下
代碼如下:[2, 3]

方法3
前面的例子中兩個list都是簡單的單元素列表,還有一種比較特殊的情況,就是有嵌套類型的
代碼如下:b1=[1,2,3]
b2=[[2,4],[3,5]]
b3 = [filter(lambda x: x in b1,sublist) for sublist in b2]
print b3

運行結果如下
代碼如下:[2, 3]
希望本文所述對大家的Python程序設計有所幫助。

3. python 怎麼求兩個列表的交集

方法1

遍歷b1,如果某個元素同時也存在於b2中,則返回

復制代碼代碼如下:
b1=[1,2,3]
b2=[2,3,4]
b3 = [val for val in b1 if val in b2]
print b3

運行結內果如下

復制代碼代碼如下:
[2, 3]

方法容2

把列表轉換為集合,利用集合操作符求出交集,然後再轉換回列表類型

復制代碼代碼如下:
b1=[1,2,3]
b2=[2,3,4]
b3=list(set(b1) & set(b2))
print b3

運行結果如下

復制代碼代碼如下:
[2, 3]

方法3

前面的例子中兩個list都是簡單的單元素列表,還有一種比較特殊的情況,就是有嵌套類型的

復制代碼代碼如下:
b1=[1,2,3]
b2=[[2,4],[3,5]]
b3 = [filter(lambda x: x in b1,sublist) for sublist in b2]
print b3

運行結果如下

復制代碼代碼如下:
[2, 3]

4. numpy 兩個一維數組的差集

>>> a = np.array([1, 2, 3, 2, 4, 1])
>>> b = np.array([3, 4, 5, 6])
>>> np.setdiff1d(a, b)
array([1, 2])

5. python3 從一個字元串list中刪除另一個字元串list中的所有元素

l1=['a','b','c']
l2=['a','b']
#計算兩個集合的差集
print(list(set(a).difference(set(b))))
#['c']

6. python循環處理list的交集。並集和不同。(用循環處理)

a1=[1,2,3,4,5,6,7,8,9]
b1=[2,5,3]
c1=[1,4,6,8]
temp1=[valforvalina1ifvalinb1]
printtemp1

temp=[valforvalina1ifvalnotinb1]#第一和第二比較的剩餘數據

temp2=[valforvalintempifvalinc1]
printtemp2

print[valforvalintempifvalnotinc1]#一、二比較的剩餘數據和第三比較剩餘的數據列印出來

一樓版少了權兩句 我只補充 請樓主點贊一樓的

7. python二維數組怎麼求交集

本文實例講述了python獲得兩個數組交集、並集、差集的房部分。分享給大家供大家參考。具體如下:
1. 獲取兩個list 的交集
#方法一:
a=[2,3,4,5]
b=[2,5,8]
tmp = [val for val in a if val in b]
print tmp
#[2, 5]

#方法二
print list(set(a).intersection(set(b)))

2. 獲取兩個list 的並集

print list(set(a).union(set(b)))

3. 獲取兩個 list 的差集

print list(set(b).difference(set(a))) # b中有而a中沒有的

通過以上方法,就能處理python list 的交集,並集,差集了。

8. python兩個列表(或集合、字典)進行比較,如果一個列表中的幾位在另一個列表中出現,則刪除這些項

#coding=utf-8
#py2.7
test1 = ['a1', 'b2']
test2 = ['a1_001', 'a1_002', 'a1_003', 'a2_001', 'a3_001', 'b2_001']
print filter(lambda x:x[:2] not in test1,test2)
#我是按照你給的例子來寫的代碼,這樣只循環了 test2長度的次數
#「現在兩組數據長度不一樣」,不太明白這句話對於你的邏輯有啥影響

9. python如何求嵌套列表的交集

python中列表屬於有序序列,沒有求交集這個說法,只有python中的集合才有求交集的用法內
集合求交集法:a&b #a和b都是容集合
你可以通過set([……])將列表先轉化為集合,然後再用上面的做法求交集

10. python怎麼求兩個集合set的差集

這個復是python官方的中文教程制
有最新的3.4.3版本的
也可以選擇中英對照
基本的東西都講述的差不多了
如果想了解更多庫或模塊
知乎上大神很多
隨便找一找都能找到很多有用的建議
但是建議不要初期就看過多虛的比較和互撕神馬的
官方的idle用好了之...