序列:通俗的说是序列中每个元素都按照一定的顺序排列,并且每个元 素有相应的序号
Python中表示“组”的概念与定义
在现实世界中总是存在一组一组的事物——事物成组出现
一、列表[]-list
Python中用列表表示组的概念
>>> type([1,2,3,4])
<class 'list'>
>>> type(["hello","world",8,True,False,1.5])
<class 'list'>
与其他的语言的数组类型有所不同,C/C++中的数组中元素的类型必须相同的,而在Python中列表中的元素可以是不同类型的。
Python的列表中可以嵌套列表——嵌套列表
>>> type([[1,2],[3,4],[True,False]])
<class 'list'>
>>> type([[1,2],[3,4,5],[True,False]])
<class 'list'>
列表的基本操作
1.列表中元素的选取
列表的操作和字符串的操作类似
>>> ["新月打击","苍白之瀑","月之降临","新月冲刺"][0]
'新月打击'
>>> ["新月打击","苍白之瀑","月之降临","新月冲刺"][3]
'新月冲刺'
>>> ["新月打击","苍白之瀑","月之降临","新月冲刺"][0:2]
['新月打击', '苍白之瀑']
>>> ["新月打击","苍白之瀑","月之降临","新月冲刺"][-1:]
['新月冲刺']
上述示例可以发现如果用单一的[n]取出对应的元素的结果是一个字符串,而用[n:n]取出的元素的结果是一个列表
2. +操作
>>> ["新月打击","苍白之瀑","月之降临","新月冲刺"]+["点燃","虚弱"]
['新月打击', '苍白之瀑', '月之降临', '新月冲刺', '点燃', '虚弱']
3. *操作
>>> ["点燃","虚弱"]*3
['点燃', '虚弱', '点燃', '虚弱', '点燃', '虚弱']
二、元组()-tuple
元组的基本操作和列表基本类似
>>> (1,2,3,4)
(1, 2, 3, 4)
>>> (1,'1',True)
(1, '1', True)
>>> (1,2,3,4)[0]
1
>>> (1,2,3,4)[0:2]
(1, 2)
>>> (1,2,3,4)+(4,5,6)
(1, 2, 3, 4, 4, 5, 6)
>>> (1,2,3,4)*3
(1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4)
既然元组与列表基本类似,为什么这两种类型要同时存在?(以后补充)
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
有个奇怪的现象
>>> type((1))
<class 'int'>
>>> type(("hello"))
<class 'str'>
>>> type((1.5))
<class 'float'>
本应该是元组类型,为什么结果却是上述的类型????
因为小括号既可以表示元组,又代表一种运算优先级括号,如(1+2)*6,所以Python无法分清到底是代表什么,所以就会把它当作数学运算符括号,所以type((1))运算后会成为type(1)所以就成了int类型。
那么问题来了,如何表示单个元素的元组?
在元素的后面加一个逗号,假装还有元素。
>>> type((1,))
<class 'tuple'>
>>> type(())
<class 'tuple'>
序列:str,list,tuple
>>> [1,2,3][2]
3
>>> [1,2,3,4,5][0:3]
[1, 2, 3]
>>> [1,2,3,4,5][0:8:2]
[1, 3, 5]
这样[n:n]对序列的操作我们叫做切片,最后的这种形式以后补充。
序列共有的特性
小知识点:如何能判断某个元素是否在一个序列中
>>> 'h' in 'hello'
True
>>> 3 in [1,2,3]
True
>>> 5 in [1,2,3]
False
>>> 3 in (1,2,3)
True
>>> 5 in (1,2,3)
False
那么反过来如何能判断出某个元素不在一个序列中?
>>> 3 not in [1,2,3]
False
如何确定序列中有多少个元素?------------len()
>>> len('hello')
5
>>> len([1,2,3])
3
>>> len((1,4,5))
3
如何确定序列中的最大值和最小值?----------------max()和min()
>>> max((1,2,5,10))
10
>>> max('hello')
'o'
>>> max([1,5,7])
7
>>> min((1,2,5,10))
1
>>> min('hello')
'e'
>>> min([1,5,7])
1
集合{}set
特点:无序、不重复
>>> {1,2,3,4}[0]
Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
{1,2,3,4}[0]
TypeError: 'set' object does not support indexing
正是因为无序的特点,所以无法用序号来取值
>>> {1,1,1,2,2,2,5,5,5}
{1, 2, 5}
在集合中可以用len()、in、not in
>>> len({1,2,3})
3
>>> 1 in {1,2,3}
True
>>> 1 not in {1,2,3}
False
思考这样一个问题?{1,2,3,4,5}如何把3,4剔除?
>>> {1,2,3,4,5}-{3,4}
{1, 2, 5}
-这个符号并不代表减法,而是代表两个集合的差集(序列中无法使用)
如何找出两个集合中共有的元素?
>>> {1,2,3,4,5} & {3,4}
{3, 4}
&叫做交集
如何把两个集合合并成一个集合,并且不能出现重复的元素
>>> {1,2,3,4,5} | {3,4,7}
{1, 2, 3, 4, 5, 7}
|叫做合集或者并集
如何定义一个空的集合
>>> type(set())
<class 'set'>
>>> len(set())
0
并不是
>>> type({})
<class 'dict'>
字典dict key-value
key value
key关键字 value关键字所代表的值
一个字典中有很多个key和value,集合(set)类型
基本的定义方式:{key1:value, key2:value2...}
字典的访问方式:通过key得到/访问value
值得注意的是字典中不可以有重复的key
>>> {'Q':"新月打击",'W':"苍白之瀑",'E':"月之降临",'R':"新月冲刺"}
{'Q': '新月打击', 'W': '苍白之瀑', 'E': '月之降临', 'R': '新月冲刺'}
>>> {'Q':"新月打击",'W':"苍白之瀑",'E':"月之降临",'R':"新月冲刺"}['Q']
'新月打击'
>>> {'Q':"新月打击",'W':"苍白之瀑",'E':"月之降临",'R':"新月冲刺"}['R']
'新月冲刺'
>>> {'Q':"新月打击",'Q':"苍白之瀑",'E':"月之降临",'R':"新月冲刺"}['Q']
'苍白之瀑'
>>> {'Q':"新月打击",'Q':"苍白之瀑",'E':"月之降临",'R':"新月冲刺"}
{'Q': '苍白之瀑', 'E': '月之降临', 'R': '新月冲刺'}
虽然有重复的key没有报错但是并不代表可以这样写。
问题:{1:"新月打击",'1':"苍白之瀑",'E':"月之降临",'R':"新月冲刺"} 键的类型是否必须是字符串?1和'1'是否代表相同的键
{1:"新月打击",'1':"苍白之瀑",'E':"月之降临",'R':"新月冲刺"}
{1: '新月打击', '1': '苍白之瀑', 'E': '月之降临', 'R': '新月冲刺'}
字典的key:必须是不可变的类型
字典的value:str、int、list、set、dict
>>> {[1,2]:"新月打击",'1':"苍白之瀑",'E':"月之降临",'R':"新月冲刺"}
Traceback (most recent call last):
File "<pyshell#10>", line 1, in <module>
{[1,2]:"新月打击",'1':"苍白之瀑",'E':"月之降临",'R':"新月冲刺"}
TypeError: unhashable type: 'list'