Python基础知识- list ,tuple ,dict 和 set

list(列表)

Python有几个复合数据类型,用于表示其他值。最通用的是list(列表),是一种有序的集合。

>>> classmates = ['Michael', 'Bob', 'Tracy']
>>> classmates
['Michael', 'Bob', 'Tracy']

变量 classmates 就是一个list。用 len() 函数可以获得list元素的个数:

>>> len(classmates)
3

可以用索引访问 list 中的元素,索引是从0开始;也可以用 -1 做索引,直接获取最后一个元素:

>>> classmates[0]
'Michael'
>>> classmates[1]
'Bob'
>>> classmates[2]
'Tracy'
>>> classmates[3]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range
>>> classmates[-1]
'Tracy'>>> classmates[-2]'Bob'

>>> classmates[-2:]

['Bob', 'Jack']

返回一个新的列表。

>>> classmates[:]

['Michael', 'Bob', 'Jack']

切片操作返回列表一个新的(浅)拷贝副本,相当于 classmates.copy() 函数。

对 list 的基本操作:

1. 添加元素到末尾:list.append(x) 相当于 a[len(a):] = [x]

>>> classmates.append('Adam')
>>> classmates
['Michael', 'Bob', 'Tracy', 'Adam']

2.插入元素到指定位置:list.insert( i , x ) 

>>> classmates.insert(1, 'Jack')
>>> classmates
['Michael', 'Jack', 'Bob', 'Tracy', 'Adam']

3.删除list第一个元素:list.remove()

4.删除list最后一个元素:list.pop() 返回最后一个元素,随即删除

>>> classmates.pop()
'Adam'
>>> classmates
['Michael', 'Jack', 'Bob', 'Tracy']

5.删除指定位置的元素:list.pop(索引位置) 返回指定位置的元素,随即删除

>>> classmates.pop(1)
'Jack'
>>> classmates
['Michael', 'Bob', 'Tracy']

6.替换某个位置上的元素,直接给对应的索引位置赋值:

>>> classmates[1] = 'Sarah'
>>> classmates
['Michael', 'Sarah', 'Tracy']

7.从列表删除所有元素:list.clear() 相当于 del a[:]

8.返回列表中第一个值为 x 的元素的索引,如果没有匹配的元素会返回一个错误:list.index(x)

9.返回 x 在列表中出现的次数:list.count(x)

10.对列表中的元素进行升序排序:list.sort()    降序排序:list.reverse()

11.连接列表 list.extend(L) 相当于 a[len(a):] = L

也可以如下连接:

>>> classmates + ['Lily','John','Ally']['Michael', 'Bob', 'Jack', 'Lily', 'John', 'Ally']

12.list 里面的元素的数据类型可以不同,可以嵌套。

>>> a = ['a', 'b', 'c']
>>> n = [1, 2, 3]
>>> x = [a, n]
>>> x
[['a', 'b', 'c'], [1, 2, 3]]
>>> x[0]
['a', 'b', 'c']
>>> x[0][1]
'b'
>>> classmates[1] = 'Sarah'
>>> classmates
['Michael', 'Sarah', 'Tracy']

tuple(元组)

tuple 是初始化之后不能更改的有序列表(元组)。意义在于 tuple 不能更改,所以代码更安全,尽可能的使用 tuple 代替 list 。

tuple 和 list 非常相似,形式上区别在于 [] 与 () ,同上,classmates列表,tuple初始化之后不能更改,没有append(),insert()方法等,获取元素方法同 list 。

>>> classmates = ('Lily','John','Ally')

>>> classmates.append('Jack')

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

AttributeError: 'tuple' object has no attribute 'append'

注意定义特殊的tuple:(空的 tuple ,只有一个元素的 tuple,“可变”tuple )

>>> t = ()
>>> t
()
>>> t = (1,)
>>> t
(1,)
>>> t = ('a', 'b', ['A', 'B'])
>>> t[2][0] = 'X'
>>> t[2][1] = 'Y'
>>> t
('a', 'b', ['X', 'Y'])注:其实是 tuple 中第三个元素是 list 类型,是可更改的,所以“可变的”tuple。

元组封装(tuple packing)例子:

>>> t = 12345,54321,'Hello!'

>>> x,y,z = t

>>> x

12345

>>> y

54321

>>> z

'Hello!'

>>> t

(12345, 54321, 'Hello!')

注:x,y,z = t 这个调用等号右边可以是任何线性序列,称之为 序列拆封 。序列拆封要求左侧的变量数目与序列的元素个数相同。

dict(字典)

Python内置了字典:dict的支持(dictionary),以 关键字key 为索引,关键字可以是任意不可变类型,通常是字符串或数值。

使用键值对(key-value)存储,在一个字典之内key必须是互不相同的。一对大括号 { } 创建一个空的字典。初始化列表时,在大括号内放置一组逗号分隔的 键:值 对。dict的特点是查找速度快。

>>> tel = {'jack':4098,'sape':4139}    

>>> tel['rose'] = 4127                #添加新的键值对 rose:4127

>>> tel

{'jack': 4098, 'sape': 4139, 'rose': 4127}

>>> del tel['sape']                   #删除 sape 键值对

>>> tel['july'] = 4127                #插入成功,说明键值对的value可以重复

>>> tel

{'jack': 4098, 'rose': 4127, 'july': 4127}

>>> list(tel.keys())                  #列出tel字典中的键(key)

['jack', 'rose', 'july']

>>> sorted(tel.keys())                #对tel字典中的键(key)进行排序(默认升序排序)

['jack', 'july', 'rose']

>>> 'rose' in tel                    #判断 key 是否在 dict 中,也可以用dict提供的get()方法,

                                     #如果key不存在,返回None(在交互环境下不显示结果),或返回自己指定的value

True

>>> 'lily' in tel

False

构建dict的方式:

1. >>> tel = {'jack':4098,'sape':4139,'guido':4127}  

2. >>> tel = dict([('sape',4139),('guido',4127),('jack',4098)])

3. >>> tel = dict(sape=4139,guido=4127,jack=4098)

结果:>>> tel

{'sape': 4139, 'guido': 4127, 'jack': 4098}

字典推导式可以从任意的价值表达式中创建字典:

>>> {x: x**2 for x in (2,4,6)}

{2: 4, 4: 16, 6: 36}

删除一个key,用pop(key)方法,对应的value也会从dict中删除:

>>> tel

{'sape': 4139, 'guido': 4127, 'jack': 4098}

>>> tel.pop('guido')

4127

>>> tel

{'sape': 4139, 'jack': 4098}

dict 1.查找和插入速度快,不会随着key的增加而变慢;2.需要占用大量的内存,内存浪费多
list 1.查找和插入的时间随着元素的增加而增加;2.占用空间小,内存浪费少

set(集合)

set是一个无序不重复key的集合,基本功能包括关系测试和消除。集合运算对象还支持 union(联合),intersection(交),difference(对称差集)等数学运算。

大括号或set()函数可以用来创建集合。注意,创建空集合,要使用set()而不是{}。后者用于创建空字典。

>>> basket = {'apple','orange','apple','pear','orange','banana'}

>>> print(basket)

{'banana', 'apple', 'pear', 'orange'}

>>> basket

{'banana', 'apple', 'pear', 'orange'}

>>> 'orange' in basket

True

>>> 'pinapple' in basket

False

>>> a = set('abracadabra')
>>> b = set('alacazam')

>>> a
{'a', 'r', 'b', 'c', 'd'}
>>> a ‐ b                #在 a 中不在 b 中的字母
{'r', 'd', 'b'}
>>> a b                #在 a 中或 b 中的字母
{'a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'}

>>>  a b               #在 a 中且在 b 中的字母

{'a', 'c'}

>>>  a b               #在 a 中或在 b 中 但不在交集中的字母 a^b = a|b - a&b

{ 'r', 'd', 'b', 'm', 'z', 'l'}

操作:

通过add(key)方法可以添加元素到set中,可以重复添加,但没有效果:

>>> str = set([3,2,1,1,4,5])

>>> str

{1, 2, 3, 4, 5}

>>> str.add(3)

>>> str

{1, 2, 3, 4, 5}

通过remove(key)方法删除元素:

>>> str

{1, 2, 3, 4, 5}

>>> str.remove(2)

>>> str

{1, 3, 4, 5}

set与dict的唯一区别在于没有存储对应的value,但set的原理和dict一样,两者都不可以放入可变对象。

猜你喜欢

转载自blog.csdn.net/Threelights/article/details/79523896