python入门-list、tuple、dict、set类型
一、list 列表
1)列表创建
1)list是一种有序的集合,可以随时添加和删除其中的元素。
classmates = [‘Michael’, ‘Bob’, ‘Tracy’]
2)由于Python是动态语言,所以list中包含的元素并不要求都必须是同一种数据类型,我们完全可以在list中包含各种数据:
L = [‘Michael’, 100, True]
3)定义空list:
empty_list = []
4) list可以直接打印
L = [‘Adam’, 95.5, ‘Lisa’, 85, ‘Bart’, 59]
print L
输出:[‘Adam’, 95.5, ‘Lisa’, 85, ‘Bart’, 59]
2)列表访问
方法是通过索引来获取list中的指定元素。
1)索引从 0 开始,也就是说,第一个元素的索引是0,第二个元素的索引是1,以此类推。索引访问越界会报错
2)可以倒序访问 -1 是最后一个 -2 为倒数第二个 同样 索引访问越界会报错
3)添加新元素
L.append(‘Paul’) 默认添加到最后 list.append()方法仅适用于向后面添加单个元素,参数可以是任何东西,将作为元素添加到列表尾部
L.insert(0, ‘Paul’) 将被添加到索引为 0 的位置(也就是第一个),而原来索引为 0 的元素,以及后面的所有元素,都自动向后移动一位。索引为负数的时候原理也是这样,不过添加完并不是想要的位置
例子:
L=[1,2,3]
L.insert(-1,0)
print L
打印 [1, 2, 0, 3]
L=[1,2,3]
extend()方法事实上使用一个列表来扩展另一个列表
L.extend([4,5]) 结果为 [1,2,3,4,5]
L=[1,2,3]
L.append([4,5]) 结果为 [1,2,3,[4,5]]
参考 https://blog.csdn.net/qq_14860599/article/details/80114175
4)删除元素
L.pop() 删除最后一个 ,并且它还返回这个元素
L.pop(2) 删除索引为2的 ,并且它还返回这删除的元素
如果pop不存在的元素会报错
方法 | 代码 | 说明 |
---|---|---|
del | del L[i] | ①根据索引删除;②删除索引范围内的元素;③删除整个列表。del操作没有返回值 |
pop | L.pop(i) | 根据索引删除,返回索引位置的元素,不指定i pop删除最后一个元素 |
remove | list.remove(value) | 删除第一个符合条件的元素,注意不是根据索引删除,有返回值 |
参考 https://blog.csdn.net/weixin_42814873/article/details/83377431
5)替换元素
L[2]=‘Adam’
对于不存在的索引,赋值会报错
list和字符串的转化
参考:https://blog.csdn.net/weixin_40449071/article/details/82892881
str >>>list
str1 = "12345"
list1 = list(str1)
print list1
str2 = "123 sjhid dhi"
list2 = str2.split() #or list2 = str2.split(" ")
print list2
str3 = "www.google.com"
list3 = str3.split(".")
print list3
输出为:
['1', '2', '3', '4', '5']
['123', 'sjhid', 'dhi']
['www', 'google', 'com']
list >>>str
方式一、
str4 = "".join(list3)
print str4
str5 = ".".join(list3)
print str5
str6 = " ".join(list3)
print str6
输出为:
wwwgooglecom
www.google.com
www google com
方式二:
>>> juice=['orange','a','b']
>>> content='%s'*len(juice) % tuple(juice)
>>> print content
orangeab
二、tuple 元组
1)创建tuple
1)tuple是另一种有序的列表,中文翻译为“ 元组 ”。tuple 和 list 非常类似,但是,tuple一旦创建完毕,就不能修改了。
2) t = (‘Adam’, ‘Lisa’, ‘Bart’) – 创建
3)因为不能修改,所以没有添加、删除、替换。只有创建和访问
2)访问tuple
同list 索引下标访问 : t = (‘Adam’, ‘Lisa’, ‘Bart’) print t[0]
3)创建单元素tuple
t = (1,) 因为括号可以表示运算时的优先级,避免误解
4)tuple的不可变
tuple所谓的“不变”是说,tuple的每个元素,指向永远不变。即指向’a’,就不能改成指向’b’,指向一个list,就不能改成指向其他对象,但指向的这个list本身是可变的!
t = (‘a’, ‘b’, [‘A’, ‘B’]) l = t[2] ,l[0]=‘X’
三、dict 字典
1)什么是dict
d = {
'Adam': 95,
'Lisa': 85,
'Bart': 59
}
dict的作用是建立一组 key 和一组 value 的映射关系,dict的key是不能重复的。
我们把名字称为key,对应的成绩称为value,dict就是通过 key 来查找 value。
花括号 {} 表示这是一个dict,然后按照 key: value, 写出来即可。最后一个 key: value 的逗号可以省略。
2)集合大小-len函数
由于dict也是集合,len() 函数可以计算任意集合的大小:
3)dict元素访问
d[key] 的形式来查找对应的 value。通过 key 访问 dict 的value,只要 key 存在,dict就返回对应的value。如果key不存在,会直接报错:KeyError。
要避免 KeyError 发生,有两个办法:
- 一是先判断一下 key 是否存在,用 in 操作符:
if 'Paul' in d:
print d['Paul']
- 二是使用dict本身提供的一个 get 方法,在Key不存在的时候,返回None:
>>>print d.get('Bart')
59
>>>print d.get('Paul')
None
4)dict的特点
1) dict的第一个特点是查找速度快,无论dict有10个元素还是10万个元素,查找速度都一样。而list的查找速度随着元素增加而逐渐下降。
不过dict的查找速度快不是没有代价的,dict的缺点是占用内存大,还会浪费很多内容,list正好相反,占用内存小,但是查找速度慢。
由于dict是按 key 查找,所以,在一个dict中,key不能重复。
2) dict的第二个特点就是存储的key-value序对是没有顺序的!这和list不一样:
3) dict的第三个特点是作为 key 的元素必须不可变,Python的基本类型如字符串、整数、浮点数都是不可变的,都可以作为 key。但是list是可变的,就不能作为 key。
5) dict更新或者添加元素
d[‘Paul’] = 72
6) dict字典的删除
方法 | 代码 | 说明 |
---|---|---|
clear | dict.clear() | 删除字典内所有元素 |
pop | dict.pop(‘name’) | 删除字典给定键 key 所对应的值,返回值为被删除的值 |
popitem | dict.popitem() | 随机返回并删除字典中的一对键和值 tuple类型 |
del | del dict[‘name’]或者 del dict | 能删单一的元素也能清空字典,清空只需一项操作 |
参考 https://blog.csdn.net/uuihoo/article/details/79496440
6) 遍历dict
直接使用for循环可以遍历 dict 的 key:
d = {
'Adam': 95,
'Lisa': 85,
'Bart': 59
}
for name in d:
print name,":",d[name]
四 set集合
1)什么是set
我们只想要 dict 的 key,不关心 key 对应的 value,目的就是保证这个集合的元素不会重复,这时,set就派上用场了。
set 持有一系列元素,这一点和 list 很像,但是1)set的元素没有重复,2)而且是无序的 3)set存储的元素和dict的key类似,必须是不变对象,因此任何可变对象是不能放入set中的。 ,这点和 dict 的 key很像。
2) set集合创建
创建 set 的方式是调用 set() 并传入一个 list,list的元素将作为set的元素:
>>> s = set(['A', 'B', 'C'])
set会自动去掉重复的元素
>>> s = set(['A', 'B', 'C', 'C'])
>>> print s
set(['A', 'C', 'B'])
>>> len(s)
3
3) set访问
由于set存储的是无序集合,所以我们没法通过索引来访问。
访问 set中的某个元素实际上就是判断一个元素是否在set中。
‘Bart’ in s
4) set遍历
由于 set 也是一个集合,所以,遍历 set 和遍历 list 类似,都可以通过 for 循环实现。
s = set([('Adam', 95), ('Lisa', 85), ('Bart', 59)])
for x in s:
print x[0],":",x[1]
4)set更新-添加和删除
添加 :用set的add()方法:,如果添加的元素已经存在于set中,add()不会报错,但是不会加进去了:
>>> s = set([1, 2, 3])
>>> s.add(4)
删除:用set的remove()方法,如果删除的元素不存在set中,remove()会报错:,所以之前要判断
>>> s = set([1, 2, 3, 4])
>>> s.remove(4)
五、list和tuple、字符串 的切片
L[n: m:q]
从索引n开始,不包括m,q表示步长,隔q个取一个
L = range(1, 101)
#1. 前10个数;
#2. 3的倍数;
#3. 不大于50的5的倍数。
print L[:10]
print L[2::3]
print L[4:50:5]
输出:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99]
[5, 10, 15, 20, 25, 30, 35, 40, 45, 50]
倒序切片
利用倒序切片对 1 - 100 的数列取出:
- 最后10个数;
- 最后10个5的倍数。
L = range(1, 101)
print L[-10:]
print L[4::5][-10::-1]
print L[4::5][-10::1]
输出:
[91, 92, 93, 94, 95, 96, 97, 98, 99, 100]
[55, 50, 45, 40, 35, 30, 25, 20, 15, 10, 5]
[55, 60, 65, 70, 75, 80, 85, 90, 95, 100]
字符串切片
字符串 'xxx’和 Unicode字符串 u’xxx’也可以看成是一种list,每个元素就是一个字符。因此,字符串也可以用切片操作,只是操作结果仍是字符串:
在很多编程语言中,针对字符串提供了很多各种截取函数,其实目的就是对字符串切片。Python没有针对字符串的截取函数,只需要切片一个操作就可以完成,非常简单。
def firstCharUpper(s,n=1):
return s[0:n].upper()+s[n:]
print firstCharUpper('hello')
zip函数
zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。
如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表
>>>a = [1,2,3]
>>> b = [4,5,6]
>>> c = [4,5,6,7,8]
>>> zipped = zip(a,b) # 打包为元组的列表
[(1, 4), (2, 5), (3, 6)]
>>> zip(a,c) # 元素个数与最短的列表一致
[(1, 4), (2, 5), (3, 6)]
>>> zip(*zipped) # 与 zip 相反,*zipped 可理解为解压,返回二维矩阵式
[(1, 2, 3), (4, 5, 6)]
备注:zip 方法在 Python 2 和 Python 3 中的不同:在 Python 3.x 中为了减少内存,zip() 返回的是一个对象。如需展示列表,需手动 list() 转换。