集合

{}可以表示集合,{"as","sst"}就是一个集合set,集合中不会有重复元素。

  1. python的set和其他语言类似, 是一个无序不重复元素集, 基本功能包括关系测试和消除重复元素. 集合对象还支持union(联合), intersection(交), difference(差)和sysmmetric difference(对称差集)等数学运算.  
  2.   
  3. 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
= ['a''b''c''d']
x.pop(2)
print x
 
------------------
result:
['a''b''d']

  


2. remove()传递待删除元素,如果多个元素一样,默认删除第一个:


1
2
3
4
5
6
7
= ['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
= ['a''b''c''d']
= ['b''c']
for in x:
    if in y:
        x.remove(i)
print x
 
-----------------------
result:
['a''c''d']

  


1
2
3
4
5
6
7
8
9
10
11
= ['a''b''c''d']
= ['b''c']
for in x:
    if 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