1.1 List 与Tuples区别
List可以改变其內容,增減长度 or 替换等等皆可以,Tuples一旦赋值之后,就不能再修改。以性能和内存使用量来说,Tuples皆较佳。
1.2 List类型介绍
List可以使用 [] 或是 list() 來创建空的,或是直接加入值进去,使用逗号区分即可。內容可以重复出现,且具有順序性。可以使用 list() 来作为转换其他类型到List,或是前面提到的字串split()函数。提取內容時跟字符串一样使用[ ]。
List里面可以包含不同类型的Object,当然也包括List
可以使用List的內建函数append()来向后面添加元素
print(list('cat')) # ['c', 'a', 't']
a_tuple = ('ready', 'fire', 'aim')
print(list(a_tuple)) # ['ready', 'fire', 'aim']
birthday = '1/6/1952'
print((birthday.split('/'))) # ['1', '6', '1952']
list.extend()或 += | 合并list |
list.insert() | 在指定位置插入元素,如果位置超过最大长度則放在最后面,故不会飞到很远去或出错。 |
del Object | 用来刪除某个位置的元素,剩余元素会自动往前填补 |
list.remove() | 用来移除指定元素 |
list.pop() | 类似剪出的效果,可以將指定位置的元素剪出來,默认index为 -1 |
list.index() | 找查指定元素第一次出现的index |
in Object | 判断指定元素是否存在 |
list.count() | 计算指定元素出現次数 |
XD = ['a', 'b']
XD2 = ['e', 'f']
print(XD, XD2) # ['a', 'b'] ['e', 'f']
XD.append('QQ~')
print(XD) # ['a','b','QQ~']
XD.extend(XD2)
print(XD) #['a','b','QQ~','e','f']
XD += XD2
print(XD) # ['a','b','QQ~','e','f','e','f']
XD.append(XD2)
print(XD) # ['a','b','QQ~','e','f','e','f',['e','f']]
XD.insert(2, 'c')
print(XD) # ['a', 'b', 'c', 'QQ~', 'e', 'f', 'e', 'f', ['e', 'f']]
XD.insert(500, 'ker')
print(XD) # ['a', 'b', 'c', 'QQ~', 'e', 'f', 'e', 'f', ['e', 'f'],'ker']
del XD[8]
print(XD) # ['a', 'b', 'c', 'QQ~', 'e', 'f', 'e', 'f', 'ker']
XD.remove('e')
print(XD) # ['a', 'b', 'c', 'QQ~', 'f', 'e', 'f', 'ker']
QQ = XD.pop(3)
print(XD, QQ) # ['a', 'b', 'c', 'f', 'e', 'f', 'ker'] QQ~
print(XD.index('f')) # 3
print('ker' in XD) # True
print(XD.count('f')) # 2
想要针对List、Tuples或是字串使用字串做组装,就只要一种方法就好, 不用针对每种类型都去设计一个相同的方法來做使用,如下所示。 string.join() 与 string.split()两个互相对应的用法!!
print(', '.join(['a', 'b', 'c'])) #a,b,c
print(', '.join('abc'))#a,b,c
print(', '.join(('a', 'b', 'c')))#a,b,c
print('a, b, c'.split(', '))#['a','b','c']
list.sort()为list排序方法,sorted()为通用的排序函数 其中的差异在与sort()會直接改变輸入的list,sorted()则会另外回传一个排序好的Object,len()可以获取list的长度。使用 '=' 设定变量则会是传址,等同于前面說的标签概念,把两张标签贴在同一个物件上(number or srting 除外) 这样当我改变Object后,则Object上所有的标签所指到的值都会跟着改变, 若要改成赋值的话可以使用copy() 、 list.list() 与 list[:] 来达到目的.
a = [1, 2, 3]
b = a
a[0] = 4
print(a, b) # [4, 2, 3] [4, 2, 3]
c = a.copy()
d = list(a)
e = a[:]
a[0] = 'surprises'
print(a, b, c, d, e) # ['surprises', 2, 3] ['surprises', 2, 3] [4, 2, 3] [4, 2, 3] [4, 2, 3]
1.3 Tuples类型
也是一个List,差別只在不能做修改,一旦给定后,无法再进行增加 刪除 修改等操作,所以可以当作一个常数的List。创建为空的时候使用(),一个以上时括号可以省略,但是只有一个时最后一个逗号不可以省略。
a = () #空Tuples
b = 'tem', #b:(tem,) 括号可以省略,但是一个的時候逗号不能省略
c = 'tem1', 'tem2', 'tem3' #('tem1', 'tem2', 'tem3')
d, e, f = c #d:'tem1', e:'tem2', f:'tem3'
结合以上的用法可以有一个超级方便直觉的用法,任意交换变量间的值。
(在等号右边的东西会先形成一个Tuples,再分配给前面的变量。)
a = '1' b = '2' c = '3' b, c, a = a, b, c #a='3',b='1',c='2'
既然他不能修改等等的那相对于List一定也有其他好处
- 空间较小
- 不会不小心修改到值
- 可以当作dictionary的key值 (后一小节有说明)
- 命名Tuples,可以做为Object的替代 (第六章会说明)
- 函数的传递是以Tuples形式传递
1.4字典类型
为一种没有顺序的的容器,其使用的是大括弧{},里面包含键值与值(key : value),可以使用dict()来转换其他类型至dictionary
D.update() | 合并不同dictionary |
del Object | 刪除某项 |
in Object | 是否存在里面(key) |
*D.keys() * | 获得所有key值 |
D.values() | 获得所有value值 |
*D.items() * | 获得全部的key: value( Tuples类型 ) |
*D.copy() * | 复制一个dictionary |
*D.clear() * | 清除所有內容 |
dic = { 'a':'v','b':'w', } #最后一个逗号可以省略 dic_ = { 'd':'y','c':'x' } #最后一个逗号可以省略 print(dic, dic_) #{'a': 'v', 'b': 'w'} {'d': 'y', 'c': 'x'} lol1 = [ ['a', 'b'], ['c', 'd'], ['e', 'f'] ] lol2 = [ ('a', 'b'), ('c', 'd'), ('e', 'f') ] lol3 = ( ['a', 'b'], ['c', 'd'], ['e', 'f'] ) print(dict(lol1), dict(lol2), dict(lol3)) #{'a': 'b', 'c': 'd', 'e': 'f'} {'a': 'b', 'c': 'd', 'e': 'f'} {'a': 'b', 'c': 'd', 'e': 'f'} tos1 = [ 'ab', 'cd', 'ef' ] tos2 = ( 'ab', 'cd', 'ef' ) print(dict(tos1), dict(tos2)) #{'a': 'b', 'c': 'd', 'e': 'f'} {'a': 'b', 'c': 'd', 'e': 'f'} print(dic_['c']) # x dic_['c'] = 'z' print(dic_['c']) #z dic.update(dic_) print(dic) # {'a': 'v', 'b': 'w', 'd': 'y', 'c': 'z'} del dic['d'] print(dic) #{'a': 'v', 'b': 'w', 'c': 'z'} print('a' in dic) #True print(dic.keys()) # dict_keys(['a', 'b', 'c']) print(dic.values()) # dict_values['v', 'w', 'x'] print(list(dic.items())) # [('a', 'v'), ('b', 'w'), ('c', 'x')] dic_new = dic dic_new['a'] = 'n' print(dic, dic_new) #{'a': 'n', 'b': 'w', 'c': 'z'} {'a': 'n', 'b': 'w', 'c': 'z'} dic_cp = dic.copy() dic_cp['a'] = 'm' print(dic, dic_cp) #{'a': 'n', 'b': 'w', 'c': 'z'} {'a': 'm', 'b': 'w', 'c': 'z'} dic.clear() print(dic) #{}
1.5集合类型
集合就好比沒有value的dictionary,一样没有顺序,使用大括弧{}。
空白集合为set(),也合相当于False。
使用set()可以转换其他类型至集合,dictionary转换至set只会保留key值。
in也可以检查特定元素是否存在其中。
empty_set = set() even_numbers = {0, 2, 4, 6, 8} print(empty_set, even_numbers) #set() {0, 2, 4, 6, 8} print(set( 'letters' )) #{'t', 'e', 'l', 'r', 's'} print(set( ['D', 'A', 'P', 'M'] )) #{'D', 'P', 'M', 'A'} print(set( ('U', 'Echoes', 'Atom') )) #{'U', 'Echoes', 'Atom'} print(set( {'apple': 'red', 'orange': 'orange'} )) #{'apple', 'orange'}
1.6比较数据结构
比较不同容器之间的使用差别,使用方括号([])创建列表,使用逗号创建元组,使用花括号({})创建字典。
marx_list = ['Groucho', 'Chico', 'Harpo'] marx_tuple = 'Groucho', 'Chico', 'Harpo' marx_dict = {'Groucho': 'banjo', 'Chico': 'piano', 'Harpo': 'harp'} print(marx_list[2]) # Harpo print(marx_tuple[2]) # Harpo print(marx_dict['Harpo']) #harp
1.7建立大型数据结构
dict_of_lists = {'Stooges': ['Moe', 'Curly', 'Larry'],
'Marxes': ['Groucho', 'Chico', 'Harpo'],
'Pythons': ['Chapman', 'Cleese', 'Gilliam', 'Jones', 'Palin']} print(dict_of_lists['Marxes']) #['Groucho', 'Chico', 'Harpo'] print(dict_of_lists['Marxes'][1]) # Chico