1. 关于python里面的set,set之后的集合元素是如何让排列的
python里面set是定义集合的
集合是非重复的,所以set('cheeseshop')的输出时 cehops
集合是无序的,所以 set('01234')的输出时10324(随机)
改用List列表、或则tuple元组类型就可以了。
2. Python的集合有哪些操作
集合是一个无序的,不重复的数据组合,它有着两个主要作用:去重以及关系测试。去重指的是当把一个列表变成了集合,其中重复的内容就自动的被去掉了
关系测试指的是,测试两组数据之间的交集、差集、并集等关系。
去重测试代码如下:
#创建一个列表--里面存在一些重复值
test_list = [1,2,3,4,2,2,3,4,3,2,3,4]
#利用集合将列表中重复的内容去掉
test_list = set(test_list)
#打印测试并且查看test_list被赋予新值后的数据类型print(test_list,type(test_list)) # {1, 2, 3, 4}
Tip:需要注意的是,集合和字典一样都是无序的。
获取交集需要使用集合中的方法intersection方法,获取两个集合中的交集代码如下:
#创建两个集合,并且获取集合的交集
test_list_01 = set(['YanYan','LiBai','LuLu','YangMi'])
test_list_02 = set(['YanYan','LiuDeHua','ZhangXueYou','LiBai'])
#在上面的两个集合中,存在相同的值,那么现在我们取出两个集合中的交集
test_intersection = test_list_01.intersection(test_list_02)print(test_intersection) # {'YanYan', 'LiBai'}
获取并集的方式需要采用集合中union方法,获取两个集合的并集代码如下:
#创建两个集合,并且获取集合的交集
test_list_01 =set(['YanYan','LiBai','LuLu','YangMi'])
test_list_02 =set(['YanYan','LiuDeHua','ZhangXueYou','LiBai'])
#采用集合中的union方法获取并集
test_list_union = test_list_01.union(test_list_02)
print(test_list_union) # {'LiBai', 'LuLu', 'ZhangXueYou', 'LiuDeHua', 'YangMi', 'YanYan'}
获取差集的方式要采用集合中的difference方法,获取两个集合的差集的代码如下所示:
#创建两个集合,并且获取集合的交集
test_list_01 = set(['YanYan','LiBai','LuLu','YangMi'])
test_list_02 = set(['YanYan','LiuDeHua','ZhangXueYou','LiBai'])
#使用集合中的difference方法来获取差集
test_difference = test_list_01.difference(test_list_02)
test_difference2 = test_list_02.difference(test_list_01)
print(test_difference) # {'LuLu', 'YangMi'}print(test_difference2) # {'ZhangXueYou', 'LiuDeHua'}
判断一个集合是否是另外一个集合的子集可以使用issubset()方法,同样,还可以使用issuperset()方法判断一个集合是否是另外一个集合的父级
代码如下:
#创建两个集合
list_set = set([1,2,3,4])
list_son = set([2,3])
#判断list_son是否是list_set的子集print(list_son.issubset(list_set)) # True#判断list_set是否是list_son的父级print(list_set.issuperset(list_son)) # True
对称差集(又有人称之为叫做反向差集),指的是取出两个集合中互相都没有的值取出放在一个集合中。
代码如下:
#创建两个集合
list_set_num1 = set([1,3,5,7,9])
list_set_num2 = set([2,3,4,6,9,10])
#获取两个集合的对称差集print(list_set_num1.symmetric_difference(list_set_num2)) # {1, 2, 4, 5, 6, 7, 10}
如果上述的难以理解的话,可以对对称差集理解为去掉两个集合中都存在的内容,将剩余的内容取到一个新的集合中。
除了上述的这些方法实现的关系功能之外,还有一个方法isdisjoint(),功能是判断两个集合中是否有相同的值,如果两个集合中没有相同的值(即没有交集),那么返回True
代码如下:
#创建集合
test_set_num1 = set([1,2,3,4])
test_set_num2 = set([5,6,7,8])
test_set_num3 = set([1,3,7,8])
#使用isdisjoint()方法来判断print(test_set_num1.isdisjoint(test_set_num2)) # Trueprint(test_set_num1.isdisjoint(test_set_num3)) # False
通过运算符来进行关系测试
在上面的应用中,主要是通过python中的方法进行的关系测试,那么在python中,除了使用方法以外,还可以使用关系运算符来进行关系测试。
实例代码如下:
test_list_01 =set(['YanYan','LiBai','LuLu','YangMi'])
test_list_02 =set(['YanYan','LiuDeHua','ZhangXueYou','LiBai'])
#获取交集&print(test_list_01 & test_list_02) # {'LiBai', 'YanYan'}
#获取并集|print(test_list_01 | test_list_02) # {'LuLu', 'LiBai', 'LiuDeHua', 'YanYan', 'ZhangXueYou', 'YangMi'}
#获取差集-print(test_list_01 - test_list_02) # {'LuLu', 'YangMi'}print(test_list_02 - test_list_01) # {'LiuDeHua', 'ZhangXueYou'}
#获取对称差集print(test_list_01 ^ test_list_02) # {'ZhangXueYou', 'YangMi', 'LuLu', 'LiuDeHua'}
集合的增删改查
添加
语法:Set.add()
代码如下:
#创建一个集合
test_set =set(['YanYan'])
#添加
test_set.add('LiBai') #添加一项
test_set.update(['LuLu','JingJing']) #一次性向集合中添加多项
#输出集合
print(test_set) #{'YanYan', 'LuLu', 'LiBai', 'JingJing'}
删除
删除集合中的某一个元素可以使用remove方法
代码如下:
#创建一个集合
test_set = set(['YanYan'])
#使用remove方法删除元素
test_set.remove('YanYan')print(test_set) # set()
删除项目除了使用remove以外,还可以使用pop()方法,但是pop()方法删除内容不能够指定,只是随机删除。
pop方法会把删除的内容返回,示例代码如下:
#创建一个集合
test_set = set([20,9,'a',1,2,3,4])print(test_set.pop()) # 1print(test_set.pop()) # 2print(test_set.pop()) # 3
删除元素还可以使用discard()方法,这个方法没有返回值,如果打印返回值的话会输出None
#创建一个集合
test_list = set([1,2,3,4,5])
#使用discard()方法删除--注意,discard()方法删除返回None,也就是没有返回值print(test_list.discard(3)) # None#此时原集合中的3已经被删除了print(test_list) # {1, 2, 4, 5}
查询
xins #判断x是否是s的成员
xnotins 判断x是否是s的成员
len(x) #查看x的长度
s <= t #测试是否s中的每一个元素都在t中
s >= t #测试是否t中的每一个元素都在s中
3. python list有顺序吗
列表没有顺序,定义的时候是什么样,你定义的什么顺序就是什么顺序了
比如:
4. Python中内置数据类型list,tuple,dict,set的区别和用法
这篇文章主要给大家介绍了Python中内置数据类型list,tuple,dict,set的区别和用法,都是非常基础的知识,十分的细致全面,有需要的小伙伴可以参考下。
Python语言简洁明了,可以用较少的代码实现同样的功能。这其中Python的四个内置数据类型功不可没,他们即是list, tuple, dict, set。这里对他们进行一个简明的总结。
List
字面意思就是一个集合,在Python中List中的元素用中括号[]来表示,可以这样定义一个List:
L = [12, 'China', 19.998]
可以看到并不要求元素的类型都是一样的。当然也可以定义一个空的List:
L = []
Python中的List是有序的,所以要访问List的话显然要通过序号来访问,就像是数组的下标一样,一样是下标从0开始:
>>> print L[0]
12
千万不要越界,否则会报错
>>> print L[3]
Traceback (most recent call last):
File "<stdin>", line 1, in <mole>
IndexError: list index out of range
List也可以倒序访问,通过“倒数第x个”这样的下标来表示序号,比如-1这个下标就表示倒数第一个元素:
>>> L = [12, 'China', 19.998]
>>> print L[-1]
19.998
-4的话显然就越界了
>>> print L[-4]
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <mole>
print L[-4]
IndexError: list index out of range
>>>
List通过内置的append()方法来添加到尾部,通过insert()方法添加到指定位置(下标从0开始):
>>> L = [12, 'China', 19.998]
>>> L.append('Jack')
>>> print L
[12, 'China', 19.998, 'Jack']
>>> L.insert(1, 3.14)
>>> print L
[12, 3.14, 'China', 19.998, 'Jack']
>>>
通过pop()删除最后尾部元素,也可以指定一参数删除指定位置:
>>> L.pop()
'Jack'
>>> print L
[12, 3.14, 'China', 19.998]
>>> L.pop(0)
12
>>> print L
[3.14, 'China', 19.998]
也可以通过下标进行复制替换
>>> L[1] = 'America'
>>> print L
[3.14, 'America', 19.998]
Tuple
Tuple可以看做是一种“不变”的List,访问也是通过下标,用小括号()表示:
>>> t = (3.14, 'China', 'Jason')
>>> print t
(3.14, 'China', 'Jason')
但是不能重新赋值替换:
>>> t[1] = 'America'
Traceback (most recent call last):
File "<pyshell#21>", line 1, in <mole>
t[1] = 'America'
TypeError: 'tuple' object does not support item assignment
也没有pop和insert、append方法。
可以创建空元素的tuple:
t = ()
或者单元素tuple (比如加一个逗号防止和声明一个整形歧义):
t = (3.14,)
那么tuple这个类型到底有什么用处呢?要知道如果你希望一个函数返回多个返回值,其实只要返回一个tuple就可以了,因为tuple里面的含有多个值,而且是不可变的(就像是java里面的final)。当然,tuple也是可变的,比如:
>>> t = (3.14, 'China', 'Jason', ['A', 'B'])
>>> print t
(3.14, 'China', 'Jason', ['A', 'B'])
>>> L = t[3]
>>> L[0] = 122
>>> L[1] = 233
>>> print t
(3.14, 'China', 'Jason', [122, 233])
这是因为Tuple所谓的不可变指的是指向的位置不可变,因为本例子中第四个元素并不是基本类型,而是一个List类型,所以t指向的该List的位置是不变的,但是List本身的内容是可以变化的,因为List本身在内存中的分配并不是连续的。
Dict
Dict是Python中非常重要的数据类型,就像它的字面意思一样,它是个活字典,其实就是Key-Value键值对,类似于HashMap,可以用花括号{}通过类似于定义一个C语言的结构体那样去定义它:
>>> d = {
'Adam': 95,
'Lisa': 85,
'Bart': 59,
'Paul': 75
}
>>> print d
{'Lisa': 85, 'Paul': 75, 'Adam': 95, 'Bart': 59}
可以看到打印出来的结果都是Key:Value的格式,可以通过len函数计算它的长度(List,tuple也可以):
>>> len(d)
4
可以直接通过键值对方式添加dict中的元素:
>>> print d
{'Lisa': 85, 'Paul': 75, 'Adam': 95, 'Bart': 59}
>>> d['Jone'] = 99
>>> print d
{'Lisa': 85, 'Paul': 75, 'Adam': 95, 'Jone': 99, 'Bart': 59}
List和Tuple用下标来访问内容,而Dict用Key来访问: (字符串、整型、浮点型和元组tuple都可以作为dict的key)
>>> print d['Adam']
95
如果Key不存在,会报错:
>>> print d['Jack']
Traceback (most recent call last):
File "<pyshell#40>", line 1, in <mole>
print d['Jack']
KeyError: 'Jack'
所以访问之前最好先查询下key是否存在:
>>> if 'Adam' in d : print 'exist key'
exist key
或者直接用保险的get方法:
>>> print d.get('Adam')
95
>>> print d.get('Jason')
None
至于遍历一个dict,实际上是在遍历它的所有的Key的集合,然后用这个Key来获得对应的Value:
>>> for key in d : print key, ':', d.get(key)
Lisa : 85
Paul : 75
Adam : 95
Bart : 59
Dict具有一些特点:
查找速度快。无论是10个还是10万个,速度都是一样的,但是代价是耗费的内存大。List相反,占用内存小,但是查找速度慢。这就好比是数组和链表的区别,数组并不知道要开辟多少空间,所以往往开始就会开辟一个大空间,但是直接通过下标查找速度快;而链表占用的空间小,但是查找的时候必须顺序的遍历导致速度很慢
没有顺序。Dict是无顺序的,而List是有序的集合,所以不能用Dict来存储有序集合
Key不可变,Value可变。一旦一个键值对加入dict后,它对应的key就不能再变了,但是Value是可以变化的。所以List不可以当做Dict的Key,但是可以作为Value:
>>> print d
{'Lisa': 85, 'Paul': 75, 'Adam': 95, 'Jone': 99, 'Bart': 59}
>>> d['NewList'] = [12, 23, 'Jack']
>>> print d
{'Bart': 59, 'NewList': [12, 23, 'Jack'], 'Adam': 95, 'Jone': 99, 'Lisa': 85, 'Paul': 75}
Key不可重复。(下面例子中添加了一个'Jone':0,但是实际上原来已经有'Jone'这个Key了,所以仅仅是改了原来的value)
>>> print d
{'Bart': 59, 'NewList': [12, 23, 'Jack'], 'Adam': 95, 'Jone': 99, 'Lisa': 85, 'Paul': 75}
>>> d['Jone'] = 0
>>> print d
{'Bart': 59, 'NewList': [12, 23, 'Jack'], 'Adam': 95, 'Jone': 0, 'Lisa': 85, 'Paul': 75}
Dict的合并,如何将两个Dict合并为一个,可以用dict函数:
>>> d1 = {'mike':12, 'jack':19}
>>> d2 = {'jone':22, 'ivy':17}
>>> dMerge = dict(d1.items() + d2.items())
>>> print dMerge
{'mike': 12, 'jack': 19, 'jone': 22, 'ivy': 17}
或者
>>> dMerge2 = dict(d1, **d2)
>>> print dMerge2
{'mike': 12, 'jack': 19, 'jone': 22, 'ivy': 17}
方法2比方法1速度快很多,方法2等同于:
>>> dMerge3 = dict(d1)
>>> dMerge3.update(d2)
>>> print dMerge
{'mike': 12, 'jack': 19, 'jone': 22, 'ivy': 17}
set
set就像是把Dict中的key抽出来了一样,类似于一个List,但是内容又不能重复,通过调用set()方法创建:
>>> s = set(['A', 'B', 'C'])
就像dict是无序的一样,set也是无序的,也不能包含重复的元素。
对于访问一个set的意义就仅仅在于查看某个元素是否在这个集合里面:
>>> print 'A' in s
True
>>> print 'D' in s
False
大小写是敏感的。
也通过for来遍历:
s = set([('Adam', 95), ('Lisa', 85), ('Bart', 59)])
#tuple
for x in s:
print x[0],':',x[1]
>>>
Lisa : 85
Adam : 95
Bart : 59
通过add和remove来添加、删除元素(保持不重复),添加元素时,用set的add()方法:
>>> s = set([1, 2, 3])
>>> s.add(4)
>>> print s
set([1, 2, 3, 4])
如果添加的元素已经存在于set中,add()不会报错,但是不会加进去了:
>>> s = set([1, 2, 3])
>>> s.add(3)
>>> print s
set([1, 2, 3])
删除set中的元素时,用set的remove()方法:
>>> s = set([1, 2, 3, 4])
>>> s.remove(4)
>>> print s
set([1, 2, 3])
如果删除的元素不存在set中,remove()会报错:
>>> s = set([1, 2, 3])
>>> s.remove(4)
Traceback (most recent call last):
File "<stdin>", line 1, in <mole>
KeyError: 4
所以如果我们要判断一个元素是否在一些不同的条件内符合,用set是最好的选择,下面例子:
months = set(['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec',])
x1 = 'Feb'
x2 = 'Sun'
if x1 in months:
print 'x1: ok'
else:
print 'x1: error'
if x2 in months:
print 'x2: ok'
else:
print 'x2: error'
>>>
x1: ok
x2: error
5. python列表是有序还是无序
列表(List)是一种有序和可更改的集合
拓展:
Python 编程语言中有四种集合数据类型:
列表(List)是一种有序和可更改的集合。允许重复的成员。
元组(Tuple)是一种有序且不可更改的集合。允许重复的成员。
集合(Set)是一个无序和无索引的集合。没有重复的成员。
字典(Dictionary)是一个无序,可变和有索引的集合。没有重复的成员。
6. python list 有序吗
每次print(list)返回的结果都是一致的,如果是字典的话,每次print的结果可能会不一样。所以list是有序的。但是这个有序不是说list里面的数据是排序好的,毕竟list里面会涉及到多种类型的数据。
7. python集合添加元素顺序问题
set是无序的,内部元素之间没有顺序与位置的概念,也不支持下标操作。
你看到的结果也不具有普遍性,例如,在3.8版本的python中输出如下:
8. Python序列,集合,映射在数据关系层面的含义是什么
序列:可通过偏移量来进行切片的对象。列表、元组、字符串都属于序列。
散列:无法通过偏移量来进行切片的对象。比如 集合、字典。
Python内置的一种数据类型是列表:list。list是一种有序的集合,可以随时添加和删除其中的元素。
比如,列出班里所有同学的名字,就可以用一个list表示:
>>> classmates = ['Michael', 'Bob', 'Tracy']
>>> classmates
['Michael', 'Bob', 'Tracy']
另一种有序列表叫元组:tuple。tuple和list非常类似,但是tuple一旦初始化就不能修改,比如同样是列出同学的名字:
>>> classmates = ('Michael', 'Bob', 'Tracy')
(8)python中的集合有序吗扩展阅读:
Python的表达式写法与C/C++类似。只是在某些写法有所差别。
主要的算术运算符与C/C++类似。+, -, *, /, //, **, ~, %分别表示加法或者取正、减法或者取负、乘法、除法、整除、乘方、取补、取余。>>, <<表示右移和左移。&, |, ^表示二进制的AND, OR, XOR运算。>, <, ==, !=, <=, >=用于比较两个表达式的值,分别表示大于、小于、等于、不等于、小于等于、大于等于。在这些运算符里面,~, |, ^, &, <<, >>必须应用于整数。
Python使用and, or, not表示逻辑运算。
is, is not用于比较两个变量是否是同一个对象。in, not in用于判断一个对象是否属于另外一个对象。
9. python中字典和集合属于无序序列吗
字典和集合都是无序的。字典是键值对的集合,键值对之间是无序的;集合类型是无序的,其中的每一个元素都是唯一的,不存在相同的元素。