python---基础之模块,列表,元组,字典

1、 模块

写模块的时候尽量不要和系统自带的模块的名字相同

调用模块的时候,会先在当前目录下查找是否有这个模块,然后再会如python的环境变量中查找

a.模块1:sys

代码如下:

1 import sys
2 print(sys.path)  

该代码的作用就是打印出python环境变量如下所示:

D:\\python培训\\s14\\day2

D:\\python培训\\s14

D:\\python35\\python35.zip

D:\\python35\\DLLs

D:\\python35\\lib

D:\\python35

D:\\python35\\lib\\site-packages  第三方库会放在这里

print(sys.argv) #打印当前文件的相对路径,但是在pycharm中打印的是绝对路径 打印结果如下所示:

['D:/python培训/s14/day2/sys_mod.py']

b.    模块2:os

代码如下:

1 import os
2 cmd = os.system("dir") #执行命令,不保存结果
3 cmd_res = os.popen("dir").read() #执行命令,保存结果
4 print("--->",cmd_res)
5 os.mkdir("new_dir") #创建目录

2、数据类型:

数字:整型(int) float(浮点型),无论多大在3.0python中都是int 即3.0没有长整型这个概念

布尔值:真或假  1或0

字符串

关于字符串的操作例子:

name="zhaofan"
print(name.capitalize())   #将字符串首字母大写
print(name.count("a"))     #查找字符串中a的个数
print(name.center(50,"-")) #显示结果如下:
---------------------zhaofan----------------------
print(name.endswith("an"))  #判断字符串的结尾是否为an
print("My name is zhaofan".find("name")) #返回字符串的索引
print(name.isalnum())  #如果字符串中包括文字和数字的都返回true
print("zhaofan".isalpha()) #如果字符串中都为字母则返回true
print("123123".isdigit())  #判断字符串中是否都为数字
print("ZZZZ".islower())   #判断字符串是否为小写
name.strip() 去掉前和后面的空格
name.lstrip()去掉左边的空格
name.rstrip()去掉右边的空格
name.replace() 替换
name.rfind(“字符”) 查找字符串中最右边的那个字符的下标
name.split()  分割字符串,默认是以空格分割

python3中的不等于只能用!=  取消了2.0中的<>

3、列表

列表的特点:列表是有序的,列表可以有重复的值

list[数字]  就可以取出列表中相对应的值

关于列表切片:

list[1:2]从第二个位置开始取,包括其实位置,但是不包含结尾,即取出列表的第二个值list[1],list[1:3]就可以取出第2个和第3个值

list[-1] 取出列表的最后一个值

list[-2]取出列表倒数两个值

list[:3]取出列表的前两个值

列表的增加

list.append(“元素名”) 给列表的最后追加一个元素

列表的插入

list.insert(1,“元素名”)在列表的第一个第2个位置插入一个元素

列表的修改

name[2]=”新的元素名” 将列表的第3个元素进行更改

列表的删除

name.remove(“元素名”)删除列表中对应的元素

del names[1] 删除列表中相应的元素

name.pop()如果没有输出下标则删除列表中的最后一个值,如果删除数字下标就可以删除相对应的元素

查找列表中某个元素的位置,即下标

name.index(“元素名”)

name.clear() 情况列表

name.count(“元素名”) 找出列表的某个元素的个数

name.reverse() 将列表中元素进行反转

name.sort()将列表元素进行排序

name.extend(names2) 将name2并入到name列表中

del name2 就可以删除name2列表

4、关于列表的深浅拷贝

首先浅拷贝

name.copy()  就是浅拷贝

下面是关于浅拷贝的代码例子:

 1 names = ["ZhaFan","Dean",[1,2,3,4],"Dean","Dan","jack","Yes","A","a"]
 2 names2 = names.copy()
 3 print(names)
 4 print(names2)
 5 names2[1]="zhaofan"
 6 print(names)
 7 print(names2)
 8 
 9 names[2][0]=100
10 print(names)
11 print(names2)

上述代码的的运行结果如下:

D:\python35\python.exe D:/python培训/s14/day2/copy_qian.py

['ZhaFan', 'Dean', [1, 2, 3, 4], 'Dean', 'Dan', 'jack', 'Yes', 'A', 'a']

['ZhaFan', 'Dean', [1, 2, 3, 4], 'Dean', 'Dan', 'jack', 'Yes', 'A', 'a']

['ZhaFan', 'Dean', [1, 2, 3, 4], 'Dean', 'Dan', 'jack', 'Yes', 'A', 'a']

['ZhaFan', 'zhaofan', [1, 2, 3, 4], 'Dean', 'Dan', 'jack', 'Yes', 'A', 'a']

['ZhaFan', 'Dean', [100, 2, 3, 4], 'Dean', 'Dan', 'jack', 'Yes', 'A', 'a']

['ZhaFan', 'zhaofan', [100, 2, 3, 4], 'Dean', 'Dan', 'jack', 'Yes', 'A', 'a']

总结:从上述结果可以看出,names.copy()复制出一个与names列表一样的列表当修改列表中的内容时,

如果列表中嵌套有列表,那么如果修改是列表的第一层,那么只会更改修改的那个列表,如果修改的是嵌套里的列表的内容,则两个列表的内容的都会更改

如下图:

下面是关于深拷贝

深拷贝需要借助模块copy

深拷贝的时候,就是完全都开辟出另外一个内存空间,及修改其中一个列表中任意一个值,另外一个列表都不会发生变化:

代码例子如下:

1 import copy
2 names = ["ZhaFan","Dean",[1,2,3,4],"Dean","Dan","jack","Yes","A","a"]
3 names2 = copy.deepcopy(names)
4 print(names)
5 print(names2)
6 names[2][1]=10000
7 print(names)
8 print(names2)

运行结果如下:

D:\python35\python.exe D:/python培训/s14/day2/copy_deep.py

['ZhaFan', 'Dean', [1, 2, 3, 4], 'Dean', 'Dan', 'jack', 'Yes', 'A', 'a']

['ZhaFan', 'Dean', [1, 2, 3, 4], 'Dean', 'Dan', 'jack', 'Yes', 'A', 'a']

['ZhaFan', 'Dean', [1, 10000, 3, 4], 'Dean', 'Dan', 'jack', 'Yes', 'A', 'a']

['ZhaFan', 'Dean', [1, 2, 3, 4], 'Dean', 'Dan', 'jack', 'Yes', 'A', 'a']

从代码可以看出,修改一起种一个列表中的内容,另外一个并不会发生变化

列表中打印每个元素

for I in names:

   print I

5、元组tuple

元组就是不可变的列表,即tuple一旦被初始化就不能修改,所以tuple不能用类似于list列表中的append(),insert()等这些修改的方法

关于元组的代码例子如下:

1 tt_tuple = ("zhaofan","dean","jack")
2 print(tt_tuple.count("dean"))
3 print(tt_tuple.index("jack"))
4 print(tt_tuple[-1])

运行结果如下:

D:\python35\python.exe D:/python培训/s14/day2/tuple_ex.py

1

2

jack

7、关于用list列表编写一个简单的购物车的例子:

程序要求:

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

b. 允许用户根据商品编号购买商品

c. 用户选择商品后,检测余额是否够,够就直接扣款,不够就提示用户

d. 可以随时退出,退出时,打印已经购买的商品和余额

 1 goods_list=[["Iphone",5288],["Bike",1200],["Coffee",20],["Ipad",1800]]
 2 shopping_list=[]
 3 user_salary = input("请输入你的工资是:")
 4 if user_salary.isdigit() is True:
 5     user_salary = int(user_salary)
 6     while True:
 7         for key,iterm in enumerate(goods_list):
 8             print(key,iterm[0],iterm[1])
 9         user_choice = input("你想要买什么(输入商品的序号,q表示退出系统):")
10         if user_choice.isdigit() is True:
11             user_choice=int(user_choice)
12             if user_choice > len(goods_list):
13                 print("\033[31;1m你输入的商品编号不存在\033[0m")
14                 continue
15             if goods_list[user_choice][1] < user_salary and user_choice > 0:
16                 shopping_list.append(goods_list[user_choice])
17                 user_salary -= goods_list[user_choice][1]
18                 print("\033[31;1m%s\033[0m 已经被添加到购物车,你的钱还剩余\033[31;1m%s\033[0m" %(goods_list[user_choice][0],user_salary))
19                 continue
20             else:
21                 print("\033[31;1m你没有足够的钱了,你只剩下%s人民币了\033[0m" %user_salary)
22 
23         if user_choice == "q":
24             print("你的购物车".center(50,"-"))
25             for key,iterm in enumerate(shopping_list):
26                 print(key,iterm[0],iterm[1])
27             print("你还剩余\033[31;1m%s\033[0m人民币" %user_salary)
28             break
29 else:
30     print("请输入正确的工资")

8、关于字典dict

字典有如下特点:

1)    key-value格式,key是唯一的

2)    无序的

3)    查询速度快

一个简单的dcit字典的例子:

1 info = {'name':'Dean',
2         'job':'IT',
3         'age':23,
4         'company':'XDHT'
5         }
6 print(info)

运行结果如下:

D:\python35\python.exe D:/python培训/s14/day2/dcit-2.py

{'company': 'XDHT', 'name': 'Dean', 'age': 23, 'job': 'IT'}

从这里也可看出字典是无序的

字典的增删查改

还有一种删除数据,但是如果字典为空的时候会报错,info.pop("name")

代码例子如下:

1 info = {'name':'Dean',
2         'job':'IT',
3         'age':23,
4         'company':'XDHT'
5         }
6 print(info)
7 info.pop("name")

程序运行结果如下:

D:\python35\python.exe D:/python培训/s14/day2/dcit-2.py

{'name': 'Dean', 'company': 'XDHT', 'age': 23, 'job': 'IT'}

{'company': 'XDHT', 'age': 23, 'job': 'IT'}

Process finished with exit code 0

但是如果用info.pop()的时候,删除的数据不存在就会报错

将dict的key,value转换成列表的形式显示

print(info.items())

效果如下:

D:\python35\python.exe D:/python培训/s14/day2/dcit-2.py

dict_items([('job', 'IT'), ('company', 'XDHT'), ('age', 23), ('name', 'Dean')])

特别说明一下,在python3.0中取消了has_key()的用法

而代替的方法是可以in或者not in

代码例子:

if "name"  in info:

   print("ok")

根据列表abc来创建dict里的key,后面的test是默认的value,如果不指定就是None

info = {}

info = info.fromkeys(["a","b","c"],"test")

print(info)

运行结果如下:

info = {}

info = info.fromkeys(["a","b","c"],"test")

print(info)

info.keys() #打印出字典的key

info.values() #打印出字典的value

方法1

for key in info:

print(key,info[key])

方法2

for k,v in info.items():

print(k,v)

在实际中尽量不要用方法2,因为方法2的效率比方法1的效率低,方法2会先把dict字典转换成list,所以数据大的时候不要用

9、关于字典的嵌套,代码例子如下:

 1 menu_dict={
 2     "河南省":{
 3         "焦作市":{
 4             "修武县":{"AA","BB","CC"},
 5             "武陟县":{"DD","EE","FF"},
 6             "博爱县":{"GG","HH","II"}
 7         },
 8         "新乡市":{
 9             "辉县":{"AA","BB","CC"},
10             "封丘县":{"DD","EE","FF"},
11             "延津县":{"GG","HH","II"}
12         }
13     },
14     "河北省":{
15         "邢台":{
16             "宁晋县":{"AA","BB","CC"},
17             "内丘县":{"DD","EE","FF"},
18             "邢台县":{"GG","HH","II"}
19         },
20         "唐山":{
21             "乐亭县":{"AA","BB","CC"},
22             "唐海县":{"DD","EE","FF"},
23             "玉田县":{"GG","HH","II"}
24         }
25     }
26 }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏闻道于事

JavaScript基础之注释,类型,输出,运算符

JavaScript是一种依托于网页为宿主的脚本语言,JavaScript是一门非常强大的语言,尤其对于web端,用途广泛,好用,偏向于操作网页,可以操作网页中...

2825
来自专栏HTML5学堂

原生JS | 当兔子遇到鸡

HTML5学堂-码匠:当兔子遇到鸡,会怎样呢?先别急,看个小视频~ 视频内容 当兔子遇到鸡 —— 不要害怕和别人不一样,在这个世界上,你就是独一无二的自己! 不...

36810
来自专栏Golang语言社区

Golang语言实现猜数字小游戏的方法

随机生成一个数字,输入一个数字看是否匹对,匹配则结速,反之提示是大了还是小了 package main import ( "bufio" "f...

3419
来自专栏柠檬先生

JavaScript 常用算法

1.排序算法 (1)冒泡排序,冒泡排序其实就是通过比较相邻位置的元素大小,如果左边比右边大,就交换位置,继续比较,实际上就是每轮比较都得出一个最大值,然后通过多...

1819
来自专栏生信小驿站

数据处理第3部分:选择行的基本和高级的方法

原文地址:https://suzan.rbind.io/2018/02/dplyr-tutorial-3/ 作者:Suzan Baert 这是系列dplyr...

601
来自专栏C语言C++游戏编程

C语言内置运算符丰富到令人头皮发麻,C语言基础教程之运算符篇

运算符是告诉编译器执行特定数学或逻辑函数的符号。C语言内置运算符丰富,并提供以下类型的运算符 -

1001
来自专栏猿人谷

二维数组的查找

题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否...

1795
来自专栏算法与数据结构

CC150--基本字符串压缩

利用字符重复出现的次数,编写一个方法,实现基本的字符串压缩功能。比如,字符串“aabcccccaaa”经压缩会变成“a2b1c5a3”。若压缩后的字符串没有变短...

893
来自专栏C/C++基础

printf()详解之终极无惑

printf()是C语言标准库函数,用于将格式化后的字符串输出到标准输出。标准输出,即标准输出文件,对应终端的屏幕。printf()申明于头文件stdio.h。

1403
来自专栏xingoo, 一个梦想做发明家的程序员

KMP算法初探

[edit by xingoo] kmp算法其实就是一种改进的字符串匹配算法。复杂度可以达到O(n+m),n是参考字符串长度,m是匹配字符串长度。 传统的算法,...

1736

扫码关注云+社区