列表、元组、字典与集合

-----------------------------------------------  [ 列表 ] ---------------------------------------------

列表利用位置定位某一元素,列表是可变的,你可以直接对原始列表进行增、删、改,在列表中具有相同值的元素允许出现多次。

使用[]或list()创建列表:

列表可以由零个或多个元素组成,元素之间用逗号分开,整个列表被括号所包裹;

>>> empty_list = []
>>> weekdays = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"]
>>> weekdays
['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
>>> another_empty_list = list()
>>> another_empty_list
[]
>>>

list()函数可以将其它数据类型转换成列表:

>>> list("cat")
['c', 'a', 't']
>>> a_tuple = ("one", "two", "three")
>>> list(a_tuple)
['one', 'two', 'three']

>>> birthday = "26/8/1988"
>>> birthday.split("/")  
['26', '8', '1988']
>>> splitme = "a/b//c/d///e"
>>> splitme.split('/')
['a', 'b', '', 'c', 'd', '', '', 'e']
>>> splitme.split('//')
['a/b', 'c/d', '/e']            

#split()可以根据分隔符将字符串切割成若干个子串组成的列表,如果待分割的字符串中包含连续的分割符,那么在返回的列表中会出现空串元素。

 

使用 [offset] 获取元素:

>>> weekdays = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"]
>>> weekdays[0]
'Monday'
>>> weekdays[::2]
['Monday', 'Wednesday', 'Friday']
>>> weekdays[1:3]
['Tuesday', 'Wednesday']
>>> weekdays[-1]
'Friday'
>>> weekdays[6]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
>>> weekdays[-6]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range        #当列表偏移量超出列表元素的范围时会产生异常

 

 

>>> weekdays = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"]
>>> weekdays[1] = "TUESDAY"          #使用[offset]修改元素
>>>
>>> weekdays
['Monday', 'TUESDAY', 'Wednesday', 'Thursday', 'Friday']

>>> weekdays.pop()        #pop()默认删除最后一个元素,添加参数后删除指定位置的元素
'Friday'
>>> weekdays.pop(1)
'TUESDAY'
>>> weekdays
['Monday', 'Wednesday', 'Thursday']
>>> del weekdays[-1]            #del删除指定位置的元素
>>> weekdays
['Monday', 'Wednesday']
>>>
>>> weekdays.append("TT1")          #append()添加元素至末尾
>>> weekdays
['Monday', 'Wednesday', 'TT1']
>>> weekdays.insert(1,"hello")  #在指定位置插入元素
>>> weekdays
['Monday', 'hello', 'Wednesday', 'TT1']
>>>
>>> weekdays.remove("TT1")     #指定指定值的元素
>>> weekdays
['Monday', 'hello', 'Wednesday']
>>>

>>> weekdays
['Monday', 'hello', 'Wednesday']
>>> others = ["a", "b", 1]
>>> weekdays.extend(others)                #使用extend()或+=合并列表
>>> weekdays
['Monday', 'hello', 'Wednesday', 'a', 'b', 1]
>>> t1 = [123, 456]
>>> weekdays += t1
>>> weekdays
['Monday', 'hello', 'Wednesday', 'a', 'b', 1, 123, 456]

>>> weekdays.index("hello")       #使用index()查询指定值的元素的位置
1
>>> weekdays.index("a")
3

>>> "hello" in weekdays        #使用in判断值是否存在列表中
True
>>> "aaa" in weekdays
False

>>> weekdays
['Monday', 'hello', 'Wednesday', 'a', 'b', 1, 123, 456, 'hello']
>>> weekdays.count("a")            #count()记录指定值在列表中出现的次数
1
>>> weekdays.count("hello")
2
>>>

>>> l = ["a", "b", "c", "d"]
>>> ','.join(l)         #使用join()把列表转换为字符串, join()函数的参数是字符串或其他可迭代的包含字符串的序列,它的输出是一个字符串
'a,b,c,d'
>>> ''.join(l)
'abcd'

join()是split()的逆过程:

>>> friends = ["jacky", "eric", "jerry"]
>>> s = "*"
>>> joined = s.join(friends)
>>> joined
'jacky*eric*jerry'
>>> separated = joined.split(s)
>>> separated
['jacky', 'eric', 'jerry']
>>> friends == separated
True
>>>

>>> friends
['jacky', 'eric', 'jerry', 'tina', 'tom']
>>> friends.sort()                  #列表中的元素是字符串,则会按照字母表顺序排列;
>>> friends
['eric', 'jacky', 'jerry', 'tina', 'tom']
>>> numbers = [2, 3, 10, 9, 25]
>>> numbers.sort()     #列表中的元素是数字,会默认排列成从小到大的升序;  列表方法sort()会对原列表进行排序,改变原列表的内容
>>> numbers
[2, 3, 9, 10, 25]
>>>

>>> len(friends)       # len()获取长度
5

使用=赋值,使用copy()复制

>>> a = [1, 2, 3]       #a与b实际上指向的是同一个对象,所以不管通过a还是通过b来修改列表的内容,其结果都会作用于双方
>>> b = a
>>> b
[1, 2, 3]
>>> a[0] = "surprise"
>>> a
['surprise', 2, 3]
>>> b
['surprise', 2, 3]
>>>                     

下面任意一种方法,都可以将一个列表的值复制到另一个新列表中:

* 列表copy()函数

* list()转换函数

* 列表分片[:]

>>> a = [1, 2, 3]
>>> b = a.copy()
>>> c = list(a)
>>> d = a[:]               #b、c、d都是a的复制,它们是自身带有值的新对象,与原始的a所指向的列表对象[1,2,3]没有任何关联,改变a不影响b、c、d的复制
>>> a[0] = "hello"
>>> a
['hello', 2, 3]
>>> b
[1, 2, 3]
>>> c
[1, 2, 3]
>>> d
[1, 2, 3]
>>>

 -----------------------------------------------  [ 元组 ] ---------------------------------------------

与列表类似,元组也是由任意类型元素组成的序列。与列表不同的是,元组是不可变的,这意味着一旦元组被定义,将无法进行增、删、改元素等操作。

>>> empty_tuple = ()         #使用()创建元组
>>> empty_tuple
()
>>> a_tuple = ("one", "two", "three")
>>> a_tuple
('one', 'two', 'three')
>>> a, b, c = a_tuple       #元组解包
>>> a
'one'
>>> b
'two'
>>> c
'three'
>>>

>>> hello = "abcdef"
>>> tuple(hello)              #tuple()函数可以用其他类型的数据来创建元组
('a', 'b', 'c', 'd', 'e', 'f')
>>> a_list = [1, 2, 3, 4]
>>> tuple(a_list)
(1, 2, 3, 4)

 

 -----------------------------------------------  [ 字典 ] ---------------------------------------------

字典(dictionay)与列表类似,但其中元素的顺序无关紧要,因为它们不是通过像0或1的偏移量访问的。 取而代之,每个元素拥有与之对应的互不相同的键(key),需要通过键来访问

元素。键通常是字符串,但它还可以是python中其他任意的不可变的类型:布尔型、整型、浮点数、元组、字符串等。字典是可变的,因此可以增、删和修改其中的键值对。

>>> empty_dict = {}    #用大括号{}将一系列以逗号隔开的键值对(key:value)包裹起来即可进行字典的创建。最简单的字典是空字典,它不包含任何键值对
>>> empty_dict
{}
>>> dict1 = {"a": 1, "b": 2, "c": 3}
>>> dict1
{'c': 3, 'a': 1, 'b': 2}
>>>

 使用dict()转换为字典 (用dic()将包含双值子序列的序列转换成字典,每个子序列的第一个元素为键,第二个元素为值)

>>> lol = [ ["a", "b"],["c", "d"],["e", "f"] ]
>>> dict(lol)                                  
{'e': 'f', 'c': 'd', 'a': 'b'}
>>>
>>> lot = [("a", "b"), ("c", "d"), ("e", "f")]
>>> dict(lot)
{'e': 'f', 'c': 'd', 'a': 'b'}
>>>
>>> tol = (["a", "b"], ["c", "d"], ["e", "f"])
>>> dict(tol)
{'e': 'f', 'c': 'd', 'a': 'b'}
>>>
>>> los = ["ab", "cd", "ef"]
>>> dict(los)
{'e': 'f', 'c': 'd', 'a': 'b'}
>>>
>>> tos = ("ab", "cd", "ef")
>>> dict(tos)
{'e': 'f', 'c': 'd', 'a': 'b'}
>>>

>>> d = {"a":1, "b":2, "c":3} 
>>> d["d"] = 4                            #使用 [key] 添加或修改元素
>>> d
{'d': 4, 'c': 3, 'a': 1, 'b': 2}
>>> d["b"] = 6
>>> d
{'d': 4, 'c': 3, 'a': 1, 'b': 6}
>>>

 

>>> d
{'d': 4, 'c': 3, 'a': 1, 'b': 6}
>>>
>>> d1 = {"e":10, "f": "ww", "h": "cc"}
>>> d1
{'e': 10, 'h': 'cc', 'f': 'ww'}
>>> d.update(d1)                         #使用update()进行合并字典
>>> d
{'d': 4, 'c': 3, 'a': 1, 'f': 'ww', 'h': 'cc', 'e': 10, 'b': 6}
>>>

>>> d
{'d': 4, 'c': 3, 'a': 1, 'f': 'ww', 'h': 'cc', 'e': 10, 'b': 6}
>>> del d["f"]                 #使用del删除具有指定键的元素
>>> d
{'d': 4, 'c': 3, 'a': 1, 'h': 'cc', 'e': 10, 'b': 6}
>>>
>>> d.clear()       #使用clear()删除所有元素
>>> d
{}
>>>

>>> d
{'c': 3, 'a': 1, 'b': 2}
>>> "a" in d          #使用in判断某一个键是否存在于一个字典中
True
>>> "f" in d
False

>>> d["a"]           #使用 [key] 获取元素
1
>>> d["no"]        #如果字典中不包含指定的键,会产生一个异常,有两种方法可以避免这种情况,一种是在访问前通过in测试键是否存在,另一种是使用字典函数get()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'no'
>>>
>>> d.get("b")        #get()函数,如果键存在,会得到与之对应的值;若键不存在,如果你指定了可选值,那么get()函数将返回这个可选值;否则会得到None
2
>>> d.get("no")

>>> d.get("no","Not a python")
'Not a python'

 

>>> d.keys()        #使用keys()获取所有键
dict_keys(['c', 'a', 'b'])
>>> d.values()    #使用values()获取所有值
dict_values([3, 1, 2])
>>>
>>> list(d.items())   #使用items()获取所有键值对
[('c', 3), ('a', 1), ('b', 2)]
>>>

使用=赋值,使用copy()复制; 

>>> d
{'c': 3, 'a': 1, 'b': 2}
>>>
>>> a = d
>>> a
{'c': 3, 'a': 1, 'b': 2}
>>> d["c"] = 3000             #与列表一样,对字典内容进行的修改会反映到所有与之相关联的变量名上:
>>> d
{'c': 3000, 'a': 1, 'b': 2}
>>> a
{'c': 3000, 'a': 1, 'b': 2}
>>>
>>> c = d.copy()           #若想避免这种情况,可以使用copy()将字典复制到一个新的字典中:
>>> d["a"] = "wwwwwww"
>>> d
{'c': 3000, 'a': 'wwwwwww', 'b': 2}
>>> c
{'c': 3000, 'a': 1, 'b': 2}
>>>

 

 -----------------------------------------------  [ 集合] ---------------------------------------------

 

posted @ 2017-09-21 22:30  helloworld899  阅读(153)  评论(0编辑  收藏  举报