本章学习一种集合的表达,一类是列表,一类是字典。

12.1 什么是列表

family = ['Mom','Dad','Junior']

上面就是一个列表,列表中的单个元素叫项或者元素(item)

12.2 创建列表

family是一个变量,我们可以为变量赋一个列表。

可以创建空列表:list=[]

12.3向列表增加元素

通过append()
eg:

friends = []
friends.append('Kate')

打印列表,则列表中含有Kate,依次可以增加许多元素。但是向列表增加元素之前必须先创建列表(可以空也可以非空)

12.4 这个点是什么

friends和append之间的点是与对象有关的。形式如下:
对象 . 对对象做的操作

12.5 列表可以包含任何内容

列表可以包含Python能存储的任何类型的数据,而且一个列表可以同时包含不同类型,例如数字、字符串、对象等。

12.6 从列表获取元素

可以按元素的索引号从列表获取单个元素。
索引是从0开始而不是1。

12.7 列表“分片”

用索引从列表一次获取多个元素,叫做列表分片。
分片获取元素时,从第一个索引开始,在第二个索引之前停止。
例如:
print letters[1:4]
取的是3项,不是4项。

对列表分片时,取回的是更小的列表,更小的列表是原列表的一个分片,原列表没有改变。而且,如果我们取的分片只含有一个元素,它是单元素分片,不同于直接从列表取一个元素,两者类型不同。

分片的简写:

  • 如果想要的分片包括列表的开始部分,简写为:
    eg:
print letters[:2]

冒号后是想要的元素个数

  • 如果想要得到列表末尾 ,类似简写为:
print letters[2:]

这样可以得到从指定索引到列表末尾的所有元素

  • 如果没有放入任何数,只有冒号,就可得到整个列表:
print letters[:]

12.8 修改元素

可以用索引修改某个列表元素
eg

letters[2] = 'z'

但是不能使用索引向列表增加新的元素。

12.9 向列表增加元素的其他方法

  • append()向列表末尾增加一个元素
    eg:
>>>letters.append('n')
   >>>print letters
   ['a','b','c','n']
  • extend()向列表末尾增加多个元素
    eg:
>>>letters.extend(['p','q','r'])
>>>print letters
['a','b','c','p','q','r']

insert() 在列表的某个位置增加一个元素
eg

>>>letters.insert(2,'z')
>>>print letters
['a','b','z','c']

其中需要指定在哪个位置增加。

append()与extend()区别
append()向列表增加一个元素,这个元素可以是包含多项元素的列表,而extend()可以包含多个元素。

12.10 从列表删除元素

  • remove()
    它会删除选择的元素并丢掉,不需要知道该元素的具体位置,只要知道它在列表中就可以。
    eg:
>>>letters = ['a','b','c','d']
>>>letters.remove('c')
>>>print letters
['a','b','d']
  • del
    del允许利用索引从列表删除元素
    eg:
>>>letters= ['a','b','c','d','e']
>>>del letters[3]
>>>print letters
['a','b','c','e']
  • pop()
    pop()从列表取出最后一个元素,可以为其指派一个名字
    eg:
>>>letters= ['a','b','c','d','e']
>>>lastletter = letters.pop()
>>>print letters
 ['a','b','c','d']
>>>print lastletter
e

也可以给pop提供索引,使得所在位置的元素从列表删除,并赋给指派的名字。

12.11 搜索列表

  • in
    通过in关键字来判断一个元素是否在列表内,例如,‘a’ in letters 是一个布尔表达式,它会返回true or false

查找索引

  • index()
    eg:
>>>letters = ['a','b','c']
>>>pritn letters.index('c')
2

如果列表中没有这个值,index()会报错,所以最好结合in使用

eg:

if 'c' in letters:
    print letters.index('c')

12.12 循环处理列表

循环可以迭代处理任何列表,不一定是数字列表
eg:

>>>letters= ['a','b','c','d','e']
>>>for letter in letters:
>>> print letter

a
b
c
d
e

12.13列表排序

  • sort ()

sort()自动按字母顺序对字符串从小到大排序,数字从小到大排序
使用方法:letters.sort()
注意:sort()会在原地修改列表,会改变原始列表,所以不能这样:

print letters.sort()

需要分步来:

letters.sort()
print letters

逆序排序有两种方法:
- 先进行sort(),再reverse()
- 向sort()增加参数,直接让它降序排序
letters.sort(reverse = True)

注意:所有这些排序都会对原来的列表做出修改,所有如果希望保留原顺序,需要保留副本:
eg: new_list = original_list[:]

如果直接使用sorted()方法 可以得到一个列表的有序副本而不会影响原列表的顺序
eg:

>>> original = [2,3,4,1]
>>> newer =sorted(original)
>>> print original
 [2,3,4,1]
>>> print newer
[1,2,3,4]

12.14可改变和不可改变

在python中,数字和字符串是不可改变的,列表是可改变的
如果不希望列表改变,可以使用元组类型
my_tuple=(‘1’,’2’,’3’)
这里使用圆括号,而不是中括号。元组不能排序,追加或者删除元素。

12.15 双重列表:数据表

有的列表包含行和列。一个列表的元素本身又是一个列表,也就是双重列表。
双重列表直接创建如下:
classmarks = [[1,2,3],[4,5,6]]
从列表获取一个值,可以使用两个索引,eg:print classmarks[1][0]

12.16 字典

字典组织元素的方式,就像单词和含义联系起来一样。关联在一起的两个东西 分别为键(key)和值(value)。字典中的每一项都有一个键和一个值,合起来为键值对。

创建空字典

phonenumber = {}

添加条目

phonenumber["John"] = '1555-123'

打印字典

>>>print phonenumber
{"John":1555-123""}

或者用另一种方式完成:

phonenumber = {"John":1555-123""}

如果想在字典中添加更多条目,可以直接指定新的键值,不用使用append()

可以在字典中查找东西,比如给定姓名查电话:

>>>print phonenumber["John"]
'1555-123'

字典与列表的相似处:都是将其他类型条目集中在一起的组织方式,可以包含任意类型的条目,数字、字符串、对象甚至其他集合的集合。它们都提供了在集合中查找条目的方法。

不同处:列表是有顺序的,按什么顺序添加元素,元素就会保持这种顺序。还可以排序,字典是无序的,如果向其中添加内容,然后打印,显示的顺序可能跟添加的顺序不同;列表中元素使用索引访问,字典中是用键访问。

利用keys()方法可以列出字典中所有的键
values()方法列出字典中所有的值

字典的键只可以使用不可变类型(布尔、整数、浮点数、字符串和元组),不能用列表或者字典当做键,因为它们是可变类型。

字典是无序的,但有时希望字典中的内容按某种顺序显示出来,可以对键的列表排序,然后按键的顺序显示字典内容:
eg:

>>>for key in sorted (phonenumber.keys()):
    print key,phonenumber[key]

如果想按值的某种顺序输出,可以参考:

>>>for value in sorted (phonenumber.values()):
    for key in phonenumber.keys():
        if phonenumber[key] == value:
            print key,phonenumber

字典其他可做的
- del 删除一个条目:del phonenumber[“John”]
- clear() 删除所有条目 :phonenumber.clear()
- in 确定某个键是否在字典中,返回True or False

上面的很多例子都是基于python2的,没有针对python3修改。

动手试一试(python3):
T1-4:

list=[ ]
print ("ENTER 5 NAME")
for i in range(0,5):    
    name = input( )
    list.append(name)
    print (name)
print ("The names are ",list)
#newlist = list newlist = sorted(list)
newlist = list[:]
newlist.sort()
print(newlist)
print(list)
print(list[2])
change = int(input(print('选择一个替换')))
new_name = input ('输入新名字')
list[change] = new_name
print (list)

T5:

dictionary = { 'COMPUTER':'ERW'}
#dictionary['COMPUTER']=['OLD']
T_input=input(print ("Add or look up a word?(A/L)"))
if T_input == 'A' :
    word=input(print("Type the word"))
    definition = input("Type the definition")
    dictionary[word]=[definition]
    print ('Word Added!')
if T_input == 'L':
        lookup = input(print("Type the word"))
        if lookup in dictionary.keys():
            print(dictionary[lookup])
        else:
            print ('That word is not in the dictionary yet.')
else:
    print("error")