python学习:列表元组字典

Posted 飞鸽子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python学习:列表元组字典相关的知识,希望对你有一定的参考价值。

一、列表:

列表的下标是从0开始的,最后一个元素的下标可以用 -1,取元素的时候”顾头不顾尾“。定义如下列表:

names = ["Alex","Tenglan","Eric","Rain","Tom","Amy"]

1、切片:

 1 >>> names = ["Alex","Tenglan","Eric","Rain","Tom","Amy"]
 2 >>> names[1:4]  #取下标1至下标4之间的数字,包括1,不包括4
 3 [Tenglan, Eric, Rain]
 4 >>> names[1:-1] #取下标1至-1的值,不包括-1
 5 [Tenglan, Eric, Rain, Tom]
 6 >>> names[0:3] 
 7 [Alex, Tenglan, Eric]
 8 >>> names[:3] #如果是从头开始取,0可以忽略,跟上句效果一样
 9 [Alex, Tenglan, Eric]
10 >>> names[3:] #如果想取最后一个,必须不能写-1,只能这么写
11 [Rain, Tom, Amy] 
12 >>> names[3:-1] #这样-1就不会被包含了
13 [Rain, Tom]
14 >>> names[0::2] #后面的2是代表,每隔一个元素,就取一个
15 [Alex, Eric, Tom] 
16 >>> names[::2] #和上句效果一样
17 [Alex, Eric, Tom]

 

2、追加append:

1 >>> names
2 [Alex, Tenglan, Eric, Rain, Tom, Amy]
3 >>> names.append("我是新来的")
4 >>> names
5 [Alex, Tenglan, Eric, Rain, Tom, Amy, 我是新来的]

3、插入insert:

1 >>> names
2 [Alex, Tenglan, Eric, Rain, Tom, Amy, 我是新来的]
3 >>> names.insert(2,"强行从Eric前面插入")
4 >>> names
5 [Alex, Tenglan, 强行从Eric前面插入, Eric, Rain, Tom, Amy, 我是新来的]
6 
7 >>> names.insert(5,"从eric后面插入试试新姿势")
8 >>> names
9 [Alex, Tenglan, 强行从Eric前面插入, Eric, Rain, 从eric后面插入试试新姿势, Tom, Amy, 我是新来的]

4、修改:

1 >>> names
2 [Alex, Tenglan, 强行从Eric前面插入, Eric, Rain, 从eric后面插入试试新姿势, Tom, Amy, 我是新来的]
3 >>> names[2] = "该换人了"
4 >>> names
5 [Alex, Tenglan, 该换人了, Eric, Rain, 从eric后面插入试试新姿势, Tom, Amy, 我是新来的]

5、删除:

三种方式:

a、del 列表[下标索引]

b、列表.remove("元素名称")

c、列表.pop[下标索引],pop和del的区别在于pop会返回删除的元素,但是del无返回值 

 1 >>> names
 2 [Alex, Tenglan, 强行从Eric前面插入, Eric, Rain, 从eric后面插入试试新姿势, Tom, Amy, 我是新来的]
 3 >>> del names[2] 
 4 >>> names
 5 [Alex, Tenglan, Eric, Rain, 从eric后面插入试试新姿势, Tom, Amy, 我是新来的]
 6 >>> del names[4]
 7 >>> names
 8 [Alex, Tenglan, Eric, Rain, Tom, Amy, 我是新来的]
 9 >>> 
10 >>> names.remove("Eric") #删除指定元素
11 >>> names
12 [Alex, Tenglan, Rain, Tom, Amy, 我是新来的]
13 >>> names.pop() #删除列表最后一个值 
14 我是新来的
15 >>> names
16 [Alex, Tenglan, Rain, Tom, Amy]
17 >>> names.pop(1) #删除指定位置的元素
18 Tenglan
19 >>> names
20 [Alex, Rain, Tom, Amy]

6、扩展extend:

1 >>> names
2 [Alex, Tenglan, Rain, Tom, Amy]
3 >>> b = [1,2,3]
4 >>> names.extend(b)
5 >>> names
6 [Alex, Tenglan, Rain, Tom, Amy, 1, 2, 3]

7、拷贝:

 1 >>> import copy
 2 >>> names = ["Alex","Tenglan",["Eric",1000],"Rain","Tom","Amy"]
 3 >>> name1=names.copy()
 4 >>> name1
 5 [Alex, Tenglan, [Eric, 1000], Rain, Tom, Amy]
 6 >>> name2 = copy.copy(names)
 7 >>> name2
 8 [Alex, Tenglan, [Eric, 1000], Rain, Tom, Amy]
 9 >>> name3=names[:]
10 >>> name3
11 [Alex, Tenglan, [Eric, 1000], Rain, Tom, Amy]
12 >>> name4=list(names)
13 >>> name4
14 [Alex, Tenglan, [Eric, 1000], Rain, Tom, Amy]
15 
16 上面采取了4种方式对names列表进行了copy操作。
17 现在,我们来继续往下看:
18 >>> names
19 [Alex, Tenglan, [Eric, 1000], Rain, Tom, Amy]
20 >>> name_copy=list(names)
21 >>> name_copy
22 [Alex, Tenglan, [Eric, 1000], Rain, Tom, Amy]
23 >>> names[1]=张三
24 >>> names
25 [Alex, 张三, [Eric, 1000], Rain, Tom, Amy]
26 >>> name_copy
27 [Alex, Tenglan, [Eric, 1000], Rain, Tom, Amy]
28 注意:这里我们把names列表copy了一个新的列表name_copy,然后我们更改了names表的第2个元素,从结果可以看出新列表name_copy的第2个元素并没有发生改变。
29 
30 接着往下看:
31 >>> names[2][1]=7777
32 >>> names
33 [Alex, 张三, [Eric, 7777], Rain, Tom, Amy]
34 >>> name_copy
35 [Alex, Tenglan, [Eric, 7777], Rain, Tom, Amy]
36 注意:names列表的第3个元素也是一个列表,这里我们执行names[2][1]=7777后发现,names和name_copy两个列表的相应元素同时发生了改变。
37 
38 这就是深度copy和浅度copy,上面的4中copy方式都是浅度copy,浅度copy只能copy第一层的元素,对于列表中含有的列表的元素,只是copy了这个子列表的一个内存地址而已。
39 
40 如果要实现我们在改变names列表中列表的元素时,copy过来的列表的对应元素不发生变化,必须显示的进行深度copy,往下看:
41 >>> names[2][1]=1521
42 >>> names
43 [Alex, 张三, [Eric, 1521], Rain, Tom, Amy]
44 >>> name_copy2
45 [Alex, 张三, [Eric, 7777], Rain, Tom, Amy]

8、统计count:

统计某个元素在列表中出现的次数。

1 >>> names=(1,2,3,2,4,5,3,2,7,2,3)
2 >>> names.count(3)
3 3
4 >>> names.count(2)
5 4

9、排序sort、反转reverse:

 1 >>> names = ["Alex","Tenglan",["Eric",1000],"Rain","Tom","Amy"]
 2 >>> names.sort()  #排序
 3 Traceback (most recent call last):
 4   File "<stdin>", line 1, in <module>
 5 TypeError: < not supported between instances of list and str
 6 >>> names.pop(2)
 7 [Eric, 1000]
 8 >>> names
 9 [Alex, Tenglan, Rain, Tom, Amy]
10 >>> names.sort() #排序
11 >>> names
12 [Alex, Amy, Rain, Tenglan, Tom]
13 
14 >>> names.reverse() #反转
15 >>> names
16 [Tom, Tenglan, Rain, Amy, Alex]

列表的排序和反转对中文没有效果:

 1 >>> names=[zhangsan,张三,章邯]
 2 >>> names.sort()
 3 >>> names
 4 [zhangsan, 张三, 章邯]
 5 >>> names=[张三,zhangsan,章邯]
 6 >>> names.sort()
 7 >>> names
 8 [zhangsan, 张三, 章邯]
 9 >>> names.append(阿三)
10 >>> names
11 [zhangsan, 张三, 章邯, 阿三]
12 >>> names.sort()
13 >>> names
14 [zhangsan, 张三, 章邯, 阿三]
15 >>> names.append(asan)
16 >>> names.sort()
17 >>> names
18 [asan, zhangsan, 张三, 章邯, 阿三]

10、获取下标index:

注意:只返回找到指定元素的第一个下标

1 >>> names
2 [asan, zhangsan, 张三, 章邯, 张三, 阿三]
3 >>> names.index(zhangsan)
4 1
5 >>> names.index(张三)
6 2

二、元组

元组和列表其实差不多,只是元组一旦创建就不允许再修改,所以元组又叫做只读列表。

元组的定义:

names = ("Alex","Tenglan","Eric","Rain","Tom","Amy")

元组只有两个方法:count、index

三、字典

四、购物车作业

需求(列表):

1、启动程序后,让用户输入工资,然后打印商品列表

2、用户选择商品编号购买商品

3、用户选择商品后,检测余额是否够,如果余额够就直接扣款,如果不够就提醒

4、可随时退出,退出时打印已购买的上和余额

技术图片
 1 product_list = [(Iphone,5800),
 2                 (Mac Pro,9800),
 3                 (Bike,800),
 4                 (Watch,10600),
 5                 (Coffee,31),
 6                 (Alex Python,120)]
 7 shopping_cart = []
 8 
 9 salary = input("Input your salary: ")
10 if salary.isdigit():
11     salary = int(salary)
12     while 1:
13         for item in product_list:
14             print(product_list.index(item) + 1, item)
15 
16         user_choice = input("请选择需要购买的商品:").lower()
17         if user_choice.isdigit():
18             user_choice = int(user_choice)
19             if user_choice > 0 and user_choice <= len(product_list):
20                 p_item = product_list[user_choice - 1]
21                 if p_item[1] <= salary:
22                     shopping_cart.append(p_item)
23                     salary = salary - p_item[1]
24                     print("Added %s into shopping cart,your current balance is 33[31;1m%s33[0m"%(p_item[0], salary))
25                 else:
26                     print("33[32;1m你的余额只剩下【%s】元,无法再购买任何商品!33[0m"%salary)
27             else:
28                 print("你选择的商品不存在商品列表中!")
29         elif user_choice == q:
30             print("-------shopping cart--------")
31             for index, item in enumerate(shopping_cart):
32                 print(item)
33             print("Your current balance is :", salary)
34             break
35         else:
36             print(Invalid Option...)
View Code

以上是关于python学习:列表元组字典的主要内容,如果未能解决你的问题,请参考以下文章

Python学习之路——Python基础之基本数据类型(列表元组和字典)

python学习:列表元组字典

Python3.5学习笔记-列表元组字典

更深层次理解Python的 列表元组字典集合(工作面试学习必需掌握的知识点)

python学习笔记06-之列表元组字典

python学习笔记06-之列表元组字典