集合
{}可以表示集合,{"as","sst"}就是一个集合set,集合中不会有重复元素。
- python的set和其他语言类似, 是一个无序不重复元素集, 基本功能包括关系测试和消除重复元素. 集合对象还支持union(联合), intersection(交), difference(差)和sysmmetric difference(对称差集)等数学运算.
- sets 支持 x in set, len(set),和 for x in set。作为一个无序的集合,sets不记录元素位置或者插入点。因此,sets不支持 indexing, slicing, 或其它类序列(sequence-like)的操作。
python set类是在python的sets模块中,大家现在使用的python2.7.x中,不需要导入sets模块可以直接创建集合。
>>>set('boy')
set(['y', 'b', 'o'])
#add() 向集合中添加元素
girls = {'mf','sl','yj'}
girls.add('xf')
#pop() 随机删除集合中的一个元素
boys = {'bd','zw','jl','zy'}
result = boys.pop()
#remove() 删除集合中指定的元素 删除不存在的元素会报错
boys = {'bd','zw','jl','zy'}
boys.remove('zy')
#discard() 删除集合中指定的元素 删除不存在的元素啥都不做
boys = {'bd','zw','jl','zy'}
boys.discard('zy1')
#clear() 清空集合
boys = {'bd','zw','jl','zy'}
boys.clear()
#copy() 复制集合
boys = {'bd','zw','jl','zy'}
newboys = boys.copy()
#difference() 计算2个集合的差集 - a - b
dreamers = {'ljl','wc','xy','zb','lsy'}
girls = {'mmf','lsy','syj'}
result = dreamers.difference(girls)
#union() 并集操作 | a | b
#update() 并集更新操作(和union作用一样)
#intersection() 计算2个集合的交集 & a & b
#issuperset() 检测当前集合是否是另一个集合的超集
#issubset() 检测当前集合是否是另一个集合的子集
#isdisjoint() 检测2个集合是否不存在交集 存在交集 False
ord() 函数是 chr() 函数(对于8位的ASCII字符串)或 unichr() 函数(对于Unicode对象)的配对函数,它以一个字符(长度为1的字符串)作为参数,返回对应的 ASCII 数值,或者 Unicode 数值,
bin() 返回一个整数 int 或者长整数 long int 的二进制表示。
python可以直接进行位运算,a & b, a|b,a^b(亦或),~(取反),<<,>>
1.pop()方法,传递的是待删除元素的index:
1
2
3
4
5
6
7
|
x = [ 'a' , 'b' , 'c' , 'd' ] x.pop( 2 ) print x - - - - - - - - - - - - - - - - - - result: [ 'a' , 'b' , 'd' ] |
2. remove()传递待删除元素,如果多个元素一样,默认删除第一个:
1
2
3
4
5
6
7
|
x = [ 'a' , 'b' , 'a' , 'c' , 'd' ] x.remove( 'a' ) print x - - - - - - - - - - - - - - - - - result: [ 'b' , 'a' , 'c' , 'd' ] |
如果要循环删除符合某个条件的元素,慎用!!
1
2
3
4
5
6
7
8
9
10
|
x = [ 'a' , 'b' , 'c' , 'd' ] y = [ 'b' , 'c' ] for i in x: if i in y: x.remove(i) print x - - - - - - - - - - - - - - - - - - - - - - - result: [ 'a' , 'c' , 'd' ] |
1
2
3
4
5
6
7
8
9
10
11
|
x = [ 'a' , 'b' , 'c' , 'd' ] y = [ 'b' , 'c' ] for i in x: if i in y: idx = x.index(i) x.pop(idx) print x - - - - - - - - - - - - - - result: [ 'a' , 'c' , 'd' ] |
我认为出现这种情况的主要原因
python itertools模块实现排列组合
一、笛卡尔积:itertools.product(*iterables[, repeat])
直接对自身进行笛卡尔积:
import itertools
for i in itertools.product('ABCD', repeat = 2):
print (''.join(i),end=' ')
- 1
- 2
- 3
输出结果:
AA AB AC AD BA BB BC BD CA CB CC CD DA DB DC DD
print (”.join(i))这个语句可以让结果直接排列到一起
end=’ ‘可以让默认的输出后换行变为一个空格
两个元组进行笛卡尔积:
import itertools
a = (1, 2, 3)
b = ('A', 'B', 'C')
c = itertools.product(a,b)
for i in c:
print(i,end=' ')
- 1
- 2
- 3
- 4
- 5
- 6
输出结果:
(1, ‘A’) (1, ‘B’) (1, ‘C’) (2, ‘A’) (2, ‘B’) (2, ‘C’) (3, ‘A’) (3, ‘B’) (3, ‘C’)
二、排列:itertools.permutations(iterable[, r])
import itertools
for i in itertools.permutations('ABCD', 2):
print (''.join(i),end=' ')
- 1
- 2
- 3
输出结果:
AB AC AD BA BC BD CA CB CD DA DB DC
三、组合:itertools.combinations(iterable, r)
import itertools
for i in itertools.combinations('ABCD', 3):
print (''.join(i))
- 1
- 2
- 3
输出结果:
ABC
ABD
ACD
BCD
四、组合(包含自身重复):itertools.combinations_with_replacement(iterable, r)
import itertools
for i in itertools.combinations_with_replacement('ABCD', 3):
print (''.join(i),end=' ')
- 1
- 2
- 3
输出结果:
AAA AAB AAC AAD ABB ABC ABD ACC ACD ADD BBB BBC BBD BCC BCD BDD CCC CCD CDD DDD