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用好了之...