Python Learning, Day2

1. 列表(list)、元组(tuple)

1.1 基本操作

列表和matlab中的向量很类似。小心2点即可:

  • 取值:顾头不顾尾,前闭后开
  • 下标:位置从0开始,最后开始为-1
names = ["Zhu Yijun", "Xiao Ming", "Xiao Ming", "Da Bing", "Xi Ha"]

#取(切片法)
print(names[1:3])  #取1和2;区间:[),顾头不顾尾
print(names[-1])   #直接取最后一个
print(names[-3:])  #取最后3个
print(names[::2])  #步长为2(0、-1可以省略)

#
names.append("Lei Haidong")#默认放最后
names.insert(1,"Lei Haidong")#插在第2个

#
#names[2] = "Xie Di"

#
names.remove("Lei Haidong")
del names[2]

#
print(names.index("Da Bing"))

#统计个数
print(names.count("Xiao Ming"))

#排序
names.sort()
print(names)

#合并
names2 = [1, 2, 3, 4]
names.extend(names2)
print(names)

#循环
for i in names:
    print(i)

1.2 列表copy

3种copy的方式,从内存地址理解可以明白

  • 直接赋值:内存完全一样,很少用
#直接赋值
p1 = person
  • 浅copy:由于引用的关系,仅第一层元素的内存不一样
#浅copy的定义

#法1
p1 = person[:]

#法2
import copy
p2 = copy.copy(person)    #需要导入copy模块
#理解浅copy的应用,共用财产,统一变
import copy
person = ['name', ['work', 100]]

p1 = person[:]
p2 = copy.copy(person)

p1[0] = 'Zhu Yijun'
p2[0] = 'Amy'

p1[1][1] = 50   #会发现,p2也变了

print(p1)
print(p2)
  • 深copy:所有元素的内存都不一样,完全独立
import copy
names3 = copy.deepcopy(names)

1.3 购物车程序收获

 把在购物车程序中的一些小收获总结如下:

扫描二维码关注公众号,回复: 3695577 查看本文章
#列表很多时,别写一行,这样多清晰
list_product = [
    ('Ipad Mini', 4000),          #这样写看起来多舒服
    ('Coffee', 30),
    ('Car', 12000),
    ('Book', 80),
    ('Tea', 30),
]
#输入的字符经判断后再强转,用.isdigit
salary = input('Please input your money:')
if salary.isdigit():  #如果字符串salary只包含数字则返回 True 否则返回 False。
    salary = int(salary)
#打印带序号的列表
for item in list_product:
     print(list_product.index(item),item)   #列表.index:查找位置
for index,item in enumerate(list_product):  #enumerate多用于在for循环中得到计数,利用它可以同时获得索引和值,即需要index和value值
     print(index,item)
#在中间输出时,变量前加%号
print("把%s加入购物车,您还剩%s元" %(p_item, salary))
print("余额不足,还剩%s元" %salary)

#彩色输出
#格式:前后加“\033[41;1m     \033[0m”即可         31红,32绿,41背景红,42背景绿
print("\033[41;1m余额不足,还剩%s元\033[0m" %salary)
#购物车程序逻辑
while True:
    打印列表
    if 输入为序号:
        判断序号,判断余额,加入购物车,打印提示信息
    elif 输入为q:
        打印清单并退出
    else: 
        输入错误

 1.4 元组(tuple)

  • 元组和列表几乎一模一样,只不过不能【增删改】而已,只能【查】。又被称为“只读列表”
  • 元组不用[],而用()
  • 它只有2个方法,一个是count,一个是index
  • 什么时候用:创建一组不被改的数据
names = ("alex", "jack")

2. 字符串操作(string)

字符串不能【增删改】,修改的话是生成一个新的数据。而列表是在原来的内存基础上就修改了。

#字符串常用操作
name = "my \tname is {name} and I am {year} old"

#统计字符个数
print(name.count("m"))   
#打印50个字符,不够-补上。(很美观)
print(name.center(50,"-"))   
#查找
print(name.find("y"))  
#字符串也能切片
print(name[name.find("name"):])   
#字符串格式化
print(name.format(name = 'alex', year = 23)) 
#字典-字符串格式化
print(name.format_map({'name':'alex','year':12}))  

#连接
print('+'.join(['1','2','3']))
#去掉两头空格、回车
print('   Zhu Yijun\n'.strip())   
#提取出数字
print('1+2+3+4'.split('+'))   

3. 字典操作(dict)

3.1 字典常用操作

列表的索引是位置,字典的索引是key

  • 字典是无序的,没有下标,也不需要下标,有key
  • key必须唯一,尽量别写中文
#字典常用操作

#字典循环打印
for i in info:
    print(i,info[i]) #通过索引循环

#字典定义
info = {
    'stu1101': "TengLan Wu", #是冒号!
    'stu1102': "LongZe Luola",
    'stu1103': "XiaoZe Maliya",
}


#
info["stu1104"] = "Alex"
#
info.pop("stu1103")  #标准删
del info["stu1102"]
#
info["stu1101"] = "武藤兰"
#
print(info.get("stu1104"))
#
print('stu1104' in info)
#字典中一些别的操作
info = {
    'stu1101': "TengLan Wu",
    'stu1102': "LongZe Luola",
    'stu1103': "XiaoZe Maliya",
}
b = {
    'stu1101':"Alex",
    1:3,
    2:5
}
#合并字典,交叉的覆盖,没有交叉的创建
info.update(b)
print(info)
# 字典转为列表
print(info.items())
#能取到就返回,取不到就创一个新的
info.setdefault("stu1106","Alex")
print(info)

3.2 三级菜单程序收获

太复杂了,以后改用函数写,嵌套循环太多。或者好好理解文艺版。

#判断元素是否在字典里
if choice1 in data
if choice2 in data[choice1]

4. 集合(set)

集合操作主要有2个用途:去重、关系测试(交叉并集)

#集合定义
s1 = set([3,5,9,10])
t = set("Hello")
#集合操作(关系测试)
list_1 = set([1,4,5,7,3,6,7,9])
list_2 = set([2,6,0,66,22,8,4])

#返回共有值(交集)
print(list_1.intersection(list_2))  #法1:常规
print(list_1 & list_2)  #法2:更简洁

5. 文件操作

猜你喜欢

转载自www.cnblogs.com/zhuyijunn/p/9830872.html
今日推荐