Python的基本数据类型(二)

序列:通俗的说是序列中每个元素都按照一定的顺序排列,并且每个元               素有相应的序号

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'

 

 

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值